#pragma once
#include "pvzStatic.h"
CVP_OBJECT(QWORD, GlobalClock, )
inline QWORD GlobalClock64() { return GlobalClock(); }
inline DWORD GlobalClock32() { return (DWORD)GlobalClock(); }
inline void GlobalClockRefresh() { GlobalClock() = GetTickCount64(); }
namespace Pvz {
#define typereg(type,name)__declspec(selectany)Cvp::TypeInterface<type> type##Type_##name(u8#name,type::Type::name);
#define typereg_(type,_type,name)__declspec(selectany)Cvp::TypeInterface<type> _type##Type_##name(u8#name,type::Type::name);
	typereg(Card, PEASHOOTER);
	typereg(Card, SUNFLOWER);
	typereg(Card, CHERRY_BOMB);
	typereg(Card, WALL_NUT);
	typereg(Card, POTATO_MINE);
	typereg(Card, SNOW_PEA);
	typereg(Card, CHOMPER);
	typereg(Card, REPEATER);
	typereg(Card, PUFF_SHROOM);
	typereg(Card, SUN_SHROOM);
	typereg(Card, FUME_SHROOM);
	typereg(Card, GRAVE_BUSTER);
	typereg(Card, HYPNO_SHROOM);
	typereg(Card, SCAREDY_SHROOM);
	typereg(Card, ICE_SHROOM);
	typereg(Card, DOOM_SHROOM);
	typereg(Card, LILY_PAD);
	typereg(Card, SQUASH);
	typereg(Card, THREEPEATER);
	typereg(Card, TANGLE_KELP);
	typereg(Card, JALAPENO);
	typereg(Card, SPIKEWEED);
	typereg(Card, TORCHWOOD);
	typereg(Card, TALL_NUT);
	typereg(Card, SEA_SHROOM);
	typereg(Card, PLANTERN);
	typereg(Card, CACTUS);
	typereg(Card, BLOVER);
	typereg(Card, SPLIT_PEA);
	typereg(Card, STARFRUIT);
	typereg(Card, PUMPKIN);
	typereg(Card, MAGNET_SHROOM);
	typereg(Card, CABBAGE_PULT);
	typereg(Card, FLOWER_POT);
	typereg(Card, KERNEL_PULT);
	typereg(Card, COFFEE_BEAN);
	typereg(Card, GARLIC);
	typereg(Card, UMBRELLA_LEAF);
	typereg(Card, MARIGOLD);
	typereg(Card, MELON_PULT);
	typereg(Card, GATLING_PEA);
	typereg(Card, TWIN_SUNFLOWER);
	typereg(Card, GLOOM_SHROOM);
	typereg(Card, CATTAIL);
	typereg(Card, WINTER_MELON);
	typereg(Card, GOLD_MAGNET);
	typereg(Card, SPIKEROCK);
	typereg(Card, COB_CANNON);
	typereg(Card, IMITATER);
	typereg(Card, NUM_SEEDS_IN_CHOOSER);
	typereg(Card, EXPLODING_NUT);
	typereg(Card, GIANT_WALL_NUT);
	typereg(Card, FLOWER_BUD);
	typereg(Card, REPEATER_LEFT);
	typereg(Card, NUM_SEED_TYPES);
	typereg(Card, BEGHOULED_RESET);
	typereg(Card, BEGHOULED_CRATER);
	typereg(Card, SLOTMACHINE_SUN);
	typereg(Card, SLOTMACHINE_DIAMOND);
	typereg(Card, AQUARIUM_SNORKEL);
	typereg(Card, AQUARIUM_TROPHY);
	typereg(Card, ZOMBIE_NORMAL);
	typereg(Card, ZOMBIE_CONEHEAD);
	typereg(Card, ZOMBIE_POLE_VAULTER);
	typereg(Card, ZOMBIE_BUCKEDHEAD);
	typereg(Card, ZOMBIE_LADDER);
	typereg(Card, ZOMBIE_DIGGER);
	typereg(Card, ZOMBIE_BUNGEE);
	typereg(Card, ZOMBIE_FOOTBALL);
	typereg(Card, ZOMBIE_BALLOON);
	typereg(Card, ZOMBIE_SCREEN_DOOR);
	typereg(Card, ZOMBONI);
	typereg(Card, ZOMBIE_POGO);
	typereg(Card, ZOMBIE_DANCER);
	typereg(Card, ZOMBIE_GARGANTUAR);
	typereg(Card, ZOMBIE_IMP);
	typereg(Plant, PEASHOOTER);
	typereg(Plant, SUNFLOWER);
	typereg(Plant, CHERRY_BOMB);
	typereg(Plant, WALL_NUT);
	typereg(Plant, POTATO_MINE);
	typereg(Plant, SNOW_PEA);
	typereg(Plant, CHOMPER);
	typereg(Plant, REPEATER);
	typereg(Plant, PUFF_SHROOM);
	typereg(Plant, SUN_SHROOM);
	typereg(Plant, FUME_SHROOM);
	typereg(Plant, GRAVE_BUSTER);
	typereg(Plant, HYPNO_SHROOM);
	typereg(Plant, SCAREDY_SHROOM);
	typereg(Plant, ICE_SHROOM);
	typereg(Plant, DOOM_SHROOM);
	typereg(Plant, LILY_PAD);
	typereg(Plant, SQUASH);
	typereg(Plant, THREEPEATER);
	typereg(Plant, TANGLE_KELP);
	typereg(Plant, JALAPENO);
	typereg(Plant, SPIKEWEED);
	typereg(Plant, TORCHWOOD);
	typereg(Plant, TALL_NUT);
	typereg(Plant, SEA_SHROOM);
	typereg(Plant, PLANTERN);
	typereg(Plant, CACTUS);
	typereg(Plant, BLOVER);
	typereg(Plant, SPLIT_PEA);
	typereg(Plant, STARFRUIT);
	typereg(Plant, PUMPKIN);
	typereg(Plant, MAGNET_SHROOM);
	typereg(Plant, CABBAGE_PULT);
	typereg(Plant, FLOWER_POT);
	typereg(Plant, KERNEL_PULT);
	typereg(Plant, COFFEE_BEAN);
	typereg(Plant, GARLIC);
	typereg(Plant, UMBRELLA_LEAF);
	typereg(Plant, MARIGOLD);
	typereg(Plant, MELON_PULT);
	typereg(Plant, GATLING_PEA);
	typereg(Plant, TWIN_SUNFLOWER);
	typereg(Plant, GLOOM_SHROOM);
	typereg(Plant, CATTAIL);
	typereg(Plant, WINTER_MELON);
	typereg(Plant, GOLD_MAGNET);
	typereg(Plant, SPIKEROCK);
	typereg(Plant, COB_CANNON);
	typereg(Plant, IMITATER);
	typereg(Plant, EXPLODING_NUT);
	typereg(Plant, GIANT_WALL_NUT);
	typereg(Plant, FLOWER_BUD);
	typereg(Plant, REPEATER_LEFT);
	typereg(Zombie, ZOMBIE);
	typereg(Zombie, FLAG_ZOMBIE);
	typereg(Zombie, CONEHEAD_ZOMBIE);
	typereg(Zombie, POLE_VAULTING_ZOMBIE);
	typereg(Zombie, BUCKETHEAD_ZOMBIE);
	typereg(Zombie, NEWSPAPER_ZOMBIE);
	typereg(Zombie, SCREEN_DOOR_ZOMBIE);
	typereg(Zombie, FOOTBALL_ZOMBIE);
	typereg(Zombie, DANCING_ZOMBIE);
	typereg(Zombie, BACKUP_DANCER);
	typereg(Zombie, DUCKY_TUBE_ZOMBIE);
	typereg(Zombie, SNORKEL_ZOMBIE);
	typereg(Zombie, ZOMBONI);
	typereg(Zombie, ZOMBIE_BOBSLED_TEAM);
	typereg(Zombie, DOLPHIN_RIDER_ZOMBIE);
	typereg(Zombie, JACK_IN_THE_BOX_ZOMBIE);
	typereg(Zombie, BALLOON_ZOMBIE);
	typereg(Zombie, DIGGER_ZOMBIE);
	typereg(Zombie, POGO_ZOMBIE);
	typereg(Zombie, YETI_ZOMBIE);
	typereg(Zombie, BUNGEE_ZOMBIE);
	typereg(Zombie, LADDER_ZOMBIE);
	typereg(Zombie, CATAPULT_ZOMBIE);
	typereg(Zombie, GARGANTUAR);
	typereg(Zombie, IMP);
	typereg(Zombie, ZOMBOSS);
	typereg(Zombie, PEASHOOTER);
	typereg(Zombie, WALL_NUT);
	typereg(Zombie, JALAPENO);
	typereg(Zombie, GATLING_PEA);
	typereg(Zombie, SQUASH);
	typereg(Zombie, TALL_NUT);
	typereg(Zombie, GIGA_GARGANTUAR);
	typereg(Bullet, PEA);
	typereg(Bullet, SNOW_PEA);
	typereg(Bullet, CABBAGE);
	typereg(Bullet, MELON);
	typereg(Bullet, PUFF);
	typereg(Bullet, SNOW_MELON);
	typereg(Bullet, FIRE_PEA);
	typereg(Bullet, STAR);
	typereg(Bullet, SPIKE);
	typereg(Bullet, ZOMBIE_BALL);
	typereg(Bullet, KERNEL);
	typereg(Bullet, BOMB);
	typereg(Bullet, BUTTER);
	typereg(Bullet, ZOMBIE_PEA);
	typereg(Item, NIL);
	typereg(Item, SILVER_COIN);
	typereg(Item, GOLD_COIN);
	typereg(Item, DIAMOND);
	typereg(Item, SUN);
	typereg(Item, SUN_SMALL);
	typereg(Item, SUN_LARGE);
	typereg(Item, NEW_CARD);
	typereg(Item, TROPHY);
	typereg(Item, SHOVEL);
	typereg(Item, ALMANCE);
	typereg(Item, KEY);
	typereg(Item, BAG_COIN_AWARD);
	typereg(Item, POT);
	typereg(Item, TACOS);
	typereg(Item, LETTER);
	typereg(Item, CARD);
	typereg(Item, PRESENT_PLANT);
	typereg(Item, BAG_COIN);
	typereg(Item, PRESENT_PLANT_AWARD);
	typereg(Item, BAG_DIAMOND);
	typereg(Item, SILVER_SUNFLOWER);
	typereg(Item, GOLD_SUNFLOWER);
	typereg(Item, CHOCOLATE);
	typereg(Item, CHOCOLATE_AWARD);
	typereg(Item, PRESENT_MINIGAME);
	typereg(Item, PRESENT_PUZZLE);
	typereg(Item, PRESENT_SURVIVAL);
	typereg(Mower, LAWN);
	typereg(Mower, POOL);
	typereg(Mower, ROOF);
	typereg(Mower, SUPER_MOWER);
	typereg(Building, NIL);
	typereg(Building, GRAVE);
	typereg(Building, CRATER);
	typereg(Building, LADDER);
	typereg(Building, PORTAL_WHITE);
	typereg(Building, PORTAL_BLACK);
	typereg(Building, BRAIN_AQ);
	typereg(Building, VASE);
	typereg(Building, SQUIRREL);
	typereg(Building, USING_TOOL);
	typereg(Building, SNAIL);
	typereg(Building, RAKE);
	typereg(Building, BRAIN_IZ);
	typereg_(Board::Yard, Yard, DAY);
	typereg_(Board::Yard, Yard, NIGHT);
	typereg_(Board::Yard, Yard, POOL);
	typereg_(Board::Yard, Yard, FOG);
	typereg_(Board::Yard, Yard, ROOF);
	typereg_(Board::Yard, Yard, MOON);
	typereg_(Board::Yard, Yard, MUSHOOM_GARDEN);
	typereg_(Board::Yard, Yard, GREENHOUSE);
	typereg_(Board::Yard, Yard, AQUARIUM);
	typereg_(Board::Yard, Yard, WISDOM_TREE);
	typereg_(GameApp::Level, Level, ADVENTURE);
	typereg_(GameApp::Level, Level, SURVIVAL_EASY_DAY);
	typereg_(GameApp::Level, Level, SURVIVAL_EASY_NIGHT);
	typereg_(GameApp::Level, Level, SURVIVAL_EASY_POOL);
	typereg_(GameApp::Level, Level, SURVIVAL_EASY_FOG);
	typereg_(GameApp::Level, Level, SURVIVAL_EASY_ROOF);
	typereg_(GameApp::Level, Level, SURVIVAL_HARD_DAY);
	typereg_(GameApp::Level, Level, SURVIVAL_HARD_NIGHT);
	typereg_(GameApp::Level, Level, SURVIVAL_HARD_POOL);
	typereg_(GameApp::Level, Level, SURVIVAL_HARD_FOG);
	typereg_(GameApp::Level, Level, SURVIVAL_HARD_ROOF);
	typereg_(GameApp::Level, Level, SURVIVAL_ENDLESS_DAY);
	typereg_(GameApp::Level, Level, SURVIVAL_ENDLESS_NIGHT);
	typereg_(GameApp::Level, Level, SURVIVAL_ENDLESS_POOL);
	typereg_(GameApp::Level, Level, SURVIVAL_ENDLESS_FOG);
	typereg_(GameApp::Level, Level, SURVIVAL_ENDLESS_ROOF);
	typereg_(GameApp::Level, Level, ZOMBOTANY);
	typereg_(GameApp::Level, Level, BOWLING);
	typereg_(GameApp::Level, Level, SLOT_MACHINE);
	typereg_(GameApp::Level, Level, SEED_RAIN);
	typereg_(GameApp::Level, Level, BEJEVELED);
	typereg_(GameApp::Level, Level, INVISIBLE);
	typereg_(GameApp::Level, Level, SEEING_STARS);
	typereg_(GameApp::Level, Level, ZOMBIE_AQ);
	typereg_(GameApp::Level, Level, BEJEVELED2);
	typereg_(GameApp::Level, Level, LITTLE_ZOMBIE);
	typereg_(GameApp::Level, Level, PORTAL);
	typereg_(GameApp::Level, Level, COLUMN);
	typereg_(GameApp::Level, Level, BOBSLED_BONANZA);
	typereg_(GameApp::Level, Level, ZOMBIE_QUICK);
	typereg_(GameApp::Level, Level, WHACK_ZOMBIE);
	typereg_(GameApp::Level, Level, LAST_STAND);
	typereg_(GameApp::Level, Level, ZOMBOTANY2);
	typereg_(GameApp::Level, Level, BOWLING2);
	typereg_(GameApp::Level, Level, POGO_PARTY);
	typereg_(GameApp::Level, Level, ZOMBBOSS_REVENGE);
	typereg_(GameApp::Level, Level, ART_WALL_NUT);
	typereg_(GameApp::Level, Level, SUNNY_DAY);
	typereg_(GameApp::Level, Level, UNSODDED);
	typereg_(GameApp::Level, Level, BIG_TIME);
	typereg_(GameApp::Level, Level, ART_SUNFLOWER);
	typereg_(GameApp::Level, Level, AIR_RAID);
	typereg_(GameApp::Level, Level, ICE_LEVEL);
	typereg_(GameApp::Level, Level, GARDEN);
	typereg_(GameApp::Level, Level, GRAVITY);
	typereg_(GameApp::Level, Level, GRAVE_DANGER);
	typereg_(GameApp::Level, Level, DIG_IT);
	typereg_(GameApp::Level, Level, STORM_NIGHT);
	typereg_(GameApp::Level, Level, BUNGEE_BLITZ);
	typereg_(GameApp::Level, Level, SQUIRREL);
	typereg_(GameApp::Level, Level, WISDOM_TREE);
	typereg_(GameApp::Level, Level, VASE_BREAKER_1);
	typereg_(GameApp::Level, Level, VASE_BREAKER_2);
	typereg_(GameApp::Level, Level, VASE_BREAKER_3);
	typereg_(GameApp::Level, Level, VASE_BREAKER_4);
	typereg_(GameApp::Level, Level, VASE_BREAKER_5);
	typereg_(GameApp::Level, Level, VASE_BREAKER_6);
	typereg_(GameApp::Level, Level, VASE_BREAKER_7);
	typereg_(GameApp::Level, Level, VASE_BREAKER_8);
	typereg_(GameApp::Level, Level, VASE_BREAKER_9);
	typereg_(GameApp::Level, Level, VASE_BREAKER_ENDLESS);
	typereg_(GameApp::Level, Level, I_ZOMBIE_1);
	typereg_(GameApp::Level, Level, I_ZOMBIE_2);
	typereg_(GameApp::Level, Level, I_ZOMBIE_3);
	typereg_(GameApp::Level, Level, I_ZOMBIE_4);
	typereg_(GameApp::Level, Level, I_ZOMBIE_5);
	typereg_(GameApp::Level, Level, I_ZOMBIE_6);
	typereg_(GameApp::Level, Level, I_ZOMBIE_7);
	typereg_(GameApp::Level, Level, I_ZOMBIE_8);
	typereg_(GameApp::Level, Level, I_ZOMBIE_9);
	typereg_(GameApp::Level, Level, I_ZOMBIE_ENDLESS);
	typereg_(GameApp::Level, Level, UPSELL);
	typereg_(GameApp::Level, Level, INTRO);
#undef typereg
#undef typereg_
}
//prop
namespace Pvz {
	template<typename T>struct BaseProp;
	template<typename T>using BasePropInterface = Cvp::PropInterface<T, BaseProp<T>>;
	template<typename T>BasePropInterface<T>& GetBaseProp();
#define DefineBasicProp(T, Interface)\
	inline BaseProp<T>& BasicProp(typename T::Type type) { return Interface[type]; }\
	inline BaseProp<T>& BasicProp(typename const Cvp::TypeInterface<T>& type) { return Interface[type]; }

	template<>struct BaseProp<Plant> {
		bool inWater = false;
		bool isShooter = false;
		Anim::Type animType = Anim::Type::NIL;
		Card::Type cardType = Card::Type::NIL;
		int packageIndex = -1;
		int atkCD = 0;
		string name = u8"";
		Cvp::Functor<void(Plant*)> Func_update = Cvp::Functor<void(Plant*)>();
	};
	__declspec(selectany) BasePropInterface<Plant>BaseProp_Plant(u8"Base"
#ifndef CVP
			, [](BasePropInterface<Plant>* _this){
			_this->Get(Plant::Type::LILY_PAD).inWater = true;
			_this->Get(Plant::Type::TANGLE_KELP).inWater = true;
			_this->Get(Plant::Type::SEA_SHROOM).inWater = true;
			_this->Get(Plant::Type::CATTAIL).inWater = true;
			_this->Get(Plant::Type::PEASHOOTER).isShooter = true;
			_this->Get(Plant::Type::SNOW_PEA).isShooter = true;
			_this->Get(Plant::Type::REPEATER).isShooter = true;
			_this->Get(Plant::Type::PUFF_SHROOM).isShooter = true;
			_this->Get(Plant::Type::FUME_SHROOM).isShooter = true;
			_this->Get(Plant::Type::SCAREDY_SHROOM).isShooter = true;
			_this->Get(Plant::Type::THREEPEATER).isShooter = true;
			_this->Get(Plant::Type::SEA_SHROOM).isShooter = true;
			_this->Get(Plant::Type::CACTUS).isShooter = true;
			_this->Get(Plant::Type::SPLIT_PEA).isShooter = true;
			_this->Get(Plant::Type::STARFRUIT).isShooter = true;
			_this->Get(Plant::Type::CABBAGE_PULT).isShooter = true;
			_this->Get(Plant::Type::KERNEL_PULT).isShooter = true;
			_this->Get(Plant::Type::MELON_PULT).isShooter = true;
			_this->Get(Plant::Type::GATLING_PEA).isShooter = true;
			_this->Get(Plant::Type::GLOOM_SHROOM).isShooter = true;
			_this->Get(Plant::Type::CATTAIL).isShooter = true;
			_this->Get(Plant::Type::WINTER_MELON).isShooter = true;
			_this->Get(Plant::Type::REPEATER_LEFT).isShooter = true;
			_this->Get(Plant::Type::PEASHOOTER).animType = Anim::Type::PEASHOOTER;
			_this->Get(Plant::Type::SUNFLOWER).animType = Anim::Type::SUNFLOWER;
			_this->Get(Plant::Type::CHERRY_BOMB).animType = Anim::Type::CHERRYBOMB;
			_this->Get(Plant::Type::WALL_NUT).animType = Anim::Type::WALLNUT;
			_this->Get(Plant::Type::POTATO_MINE).animType = Anim::Type::POTATOMINE;
			_this->Get(Plant::Type::SNOW_PEA).animType = Anim::Type::SNOWPEA;
			_this->Get(Plant::Type::CHOMPER).animType = Anim::Type::CHOMPER;
			_this->Get(Plant::Type::REPEATER).animType = Anim::Type::REPEATER;
			_this->Get(Plant::Type::PUFF_SHROOM).animType = Anim::Type::PUFFSHROOM;
			_this->Get(Plant::Type::SUN_SHROOM).animType = Anim::Type::SUNSHROOM;
			_this->Get(Plant::Type::FUME_SHROOM).animType = Anim::Type::FUMESHROOM;
			_this->Get(Plant::Type::GRAVE_BUSTER).animType = Anim::Type::GRAVE_BUSTER;
			_this->Get(Plant::Type::HYPNO_SHROOM).animType = Anim::Type::HYPNOSHROOM;
			_this->Get(Plant::Type::SCAREDY_SHROOM).animType = Anim::Type::SCRAREYSHROOM;
			_this->Get(Plant::Type::ICE_SHROOM).animType = Anim::Type::ICESHROOM;
			_this->Get(Plant::Type::DOOM_SHROOM).animType = Anim::Type::DOOMSHROOM;
			_this->Get(Plant::Type::LILY_PAD).animType = Anim::Type::LILYPAD;
			_this->Get(Plant::Type::SQUASH).animType = Anim::Type::SQUASH;
			_this->Get(Plant::Type::THREEPEATER).animType = Anim::Type::THREEPEATER;
			_this->Get(Plant::Type::TANGLE_KELP).animType = Anim::Type::TANGLEKELP;
			_this->Get(Plant::Type::JALAPENO).animType = Anim::Type::JALAPENO;
			_this->Get(Plant::Type::SPIKEWEED).animType = Anim::Type::SPIKEWEED;
			_this->Get(Plant::Type::TORCHWOOD).animType = Anim::Type::TORCHWOOD;
			_this->Get(Plant::Type::TALL_NUT).animType = Anim::Type::TALLNUT;
			_this->Get(Plant::Type::SEA_SHROOM).animType = Anim::Type::SEASHROOM;
			_this->Get(Plant::Type::PLANTERN).animType = Anim::Type::PLANTERN;
			_this->Get(Plant::Type::CACTUS).animType = Anim::Type::CACTUS;
			_this->Get(Plant::Type::BLOVER).animType = Anim::Type::BLOVER;
			_this->Get(Plant::Type::SPLIT_PEA).animType = Anim::Type::SPLITPEA;
			_this->Get(Plant::Type::STARFRUIT).animType = Anim::Type::STARFRUIT;
			_this->Get(Plant::Type::PUMPKIN).animType = Anim::Type::PUMPKIN;
			_this->Get(Plant::Type::MAGNET_SHROOM).animType = Anim::Type::MAGNETSHROOM;
			_this->Get(Plant::Type::CABBAGE_PULT).animType = Anim::Type::CABBAGEPULT;
			_this->Get(Plant::Type::FLOWER_POT).animType = Anim::Type::FLOWER_POT;
			_this->Get(Plant::Type::KERNEL_PULT).animType = Anim::Type::KERNELPULT;
			_this->Get(Plant::Type::COFFEE_BEAN).animType = Anim::Type::COFFEEBEAN;
			_this->Get(Plant::Type::GARLIC).animType = Anim::Type::GARLIC;
			_this->Get(Plant::Type::UMBRELLA_LEAF).animType = Anim::Type::UMBRELLALEAF;
			_this->Get(Plant::Type::MARIGOLD).animType = Anim::Type::MARIGOLD;
			_this->Get(Plant::Type::MELON_PULT).animType = Anim::Type::MELONPULT;
			_this->Get(Plant::Type::GATLING_PEA).animType = Anim::Type::GATLINGPEA;
			_this->Get(Plant::Type::TWIN_SUNFLOWER).animType = Anim::Type::TWIN_SUNFLOWER;
			_this->Get(Plant::Type::GLOOM_SHROOM).animType = Anim::Type::GLOOMSHROOM;
			_this->Get(Plant::Type::CATTAIL).animType = Anim::Type::CATTAIL;
			_this->Get(Plant::Type::WINTER_MELON).animType = Anim::Type::WINTER_MELON;
			_this->Get(Plant::Type::GOLD_MAGNET).animType = Anim::Type::GOLD_MAGNET;
			_this->Get(Plant::Type::SPIKEROCK).animType = Anim::Type::SPIKEROCK;
			_this->Get(Plant::Type::COB_CANNON).animType = Anim::Type::COBCANNON;
			_this->Get(Plant::Type::IMITATER).animType = Anim::Type::IMITATER;
			_this->Get(Plant::Type::EXPLODING_NUT).animType = Anim::Type::WALLNUT;
			_this->Get(Plant::Type::GIANT_WALL_NUT).animType = Anim::Type::WALLNUT;
			_this->Get(Plant::Type::FLOWER_BUD).animType = Anim::Type::NIL;
			_this->Get(Plant::Type::REPEATER_LEFT).animType = Anim::Type::REPEATER;
			_this->Get(Plant::Type::PEASHOOTER).cardType = Card::Type::PEASHOOTER;
			_this->Get(Plant::Type::SUNFLOWER).cardType = Card::Type::SUNFLOWER;
			_this->Get(Plant::Type::CHERRY_BOMB).cardType = Card::Type::CHERRY_BOMB;
			_this->Get(Plant::Type::WALL_NUT).cardType = Card::Type::WALL_NUT;
			_this->Get(Plant::Type::POTATO_MINE).cardType = Card::Type::POTATO_MINE;
			_this->Get(Plant::Type::SNOW_PEA).cardType = Card::Type::SNOW_PEA;
			_this->Get(Plant::Type::CHOMPER).cardType = Card::Type::CHOMPER;
			_this->Get(Plant::Type::REPEATER).cardType = Card::Type::REPEATER;
			_this->Get(Plant::Type::PUFF_SHROOM).cardType = Card::Type::PUFF_SHROOM;
			_this->Get(Plant::Type::SUN_SHROOM).cardType = Card::Type::SUN_SHROOM;
			_this->Get(Plant::Type::FUME_SHROOM).cardType = Card::Type::FUME_SHROOM;
			_this->Get(Plant::Type::GRAVE_BUSTER).cardType = Card::Type::GRAVE_BUSTER;
			_this->Get(Plant::Type::HYPNO_SHROOM).cardType = Card::Type::HYPNO_SHROOM;
			_this->Get(Plant::Type::SCAREDY_SHROOM).cardType = Card::Type::SCAREDY_SHROOM;
			_this->Get(Plant::Type::ICE_SHROOM).cardType = Card::Type::ICE_SHROOM;
			_this->Get(Plant::Type::DOOM_SHROOM).cardType = Card::Type::DOOM_SHROOM;
			_this->Get(Plant::Type::LILY_PAD).cardType = Card::Type::LILY_PAD;
			_this->Get(Plant::Type::SQUASH).cardType = Card::Type::SQUASH;
			_this->Get(Plant::Type::THREEPEATER).cardType = Card::Type::THREEPEATER;
			_this->Get(Plant::Type::TANGLE_KELP).cardType = Card::Type::TANGLE_KELP;
			_this->Get(Plant::Type::JALAPENO).cardType = Card::Type::JALAPENO;
			_this->Get(Plant::Type::SPIKEWEED).cardType = Card::Type::SPIKEWEED;
			_this->Get(Plant::Type::TORCHWOOD).cardType = Card::Type::TORCHWOOD;
			_this->Get(Plant::Type::TALL_NUT).cardType = Card::Type::TALL_NUT;
			_this->Get(Plant::Type::SEA_SHROOM).cardType = Card::Type::SEA_SHROOM;
			_this->Get(Plant::Type::PLANTERN).cardType = Card::Type::PLANTERN;
			_this->Get(Plant::Type::CACTUS).cardType = Card::Type::CACTUS;
			_this->Get(Plant::Type::BLOVER).cardType = Card::Type::BLOVER;
			_this->Get(Plant::Type::SPLIT_PEA).cardType = Card::Type::SPLIT_PEA;
			_this->Get(Plant::Type::STARFRUIT).cardType = Card::Type::STARFRUIT;
			_this->Get(Plant::Type::PUMPKIN).cardType = Card::Type::PUMPKIN;
			_this->Get(Plant::Type::MAGNET_SHROOM).cardType = Card::Type::MAGNET_SHROOM;
			_this->Get(Plant::Type::CABBAGE_PULT).cardType = Card::Type::CABBAGE_PULT;
			_this->Get(Plant::Type::FLOWER_POT).cardType = Card::Type::FLOWER_POT;
			_this->Get(Plant::Type::KERNEL_PULT).cardType = Card::Type::KERNEL_PULT;
			_this->Get(Plant::Type::COFFEE_BEAN).cardType = Card::Type::COFFEE_BEAN;
			_this->Get(Plant::Type::GARLIC).cardType = Card::Type::GARLIC;
			_this->Get(Plant::Type::UMBRELLA_LEAF).cardType = Card::Type::UMBRELLA_LEAF;
			_this->Get(Plant::Type::MARIGOLD).cardType = Card::Type::MARIGOLD;
			_this->Get(Plant::Type::MELON_PULT).cardType = Card::Type::MELON_PULT;
			_this->Get(Plant::Type::GATLING_PEA).cardType = Card::Type::GATLING_PEA;
			_this->Get(Plant::Type::TWIN_SUNFLOWER).cardType = Card::Type::TWIN_SUNFLOWER;
			_this->Get(Plant::Type::GLOOM_SHROOM).cardType = Card::Type::GLOOM_SHROOM;
			_this->Get(Plant::Type::CATTAIL).cardType = Card::Type::CATTAIL;
			_this->Get(Plant::Type::WINTER_MELON).cardType = Card::Type::WINTER_MELON;
			_this->Get(Plant::Type::GOLD_MAGNET).cardType = Card::Type::GOLD_MAGNET;
			_this->Get(Plant::Type::SPIKEROCK).cardType = Card::Type::SPIKEROCK;
			_this->Get(Plant::Type::COB_CANNON).cardType = Card::Type::COB_CANNON;
			_this->Get(Plant::Type::IMITATER).cardType = Card::Type::IMITATER;
			_this->Get(Plant::Type::EXPLODING_NUT).cardType = Card::Type::EXPLODING_NUT;
			_this->Get(Plant::Type::GIANT_WALL_NUT).cardType = Card::Type::GIANT_WALL_NUT;
			_this->Get(Plant::Type::FLOWER_BUD).cardType = Card::Type::FLOWER_BUD;
			_this->Get(Plant::Type::REPEATER_LEFT).cardType = Card::Type::REPEATER_LEFT;
			_this->Get(Plant::Type::PEASHOOTER).packageIndex = 0;
			_this->Get(Plant::Type::SUNFLOWER).packageIndex = 1;
			_this->Get(Plant::Type::CHERRY_BOMB).packageIndex = 3;
			_this->Get(Plant::Type::WALL_NUT).packageIndex = 2;
			_this->Get(Plant::Type::POTATO_MINE).packageIndex = 37;
			_this->Get(Plant::Type::SNOW_PEA).packageIndex = 4;
			_this->Get(Plant::Type::CHOMPER).packageIndex = 31;
			_this->Get(Plant::Type::REPEATER).packageIndex = 5;
			_this->Get(Plant::Type::PUFF_SHROOM).packageIndex = 6;
			_this->Get(Plant::Type::SUN_SHROOM).packageIndex = 7;
			_this->Get(Plant::Type::FUME_SHROOM).packageIndex = 9;
			_this->Get(Plant::Type::GRAVE_BUSTER).packageIndex = 40;
			_this->Get(Plant::Type::HYPNO_SHROOM).packageIndex = 10;
			_this->Get(Plant::Type::SCAREDY_SHROOM).packageIndex = 33;
			_this->Get(Plant::Type::ICE_SHROOM).packageIndex = 36;
			_this->Get(Plant::Type::DOOM_SHROOM).packageIndex = 20;
			_this->Get(Plant::Type::LILY_PAD).packageIndex = 19;
			_this->Get(Plant::Type::SQUASH).packageIndex = 21;
			_this->Get(Plant::Type::THREEPEATER).packageIndex = 12;
			_this->Get(Plant::Type::TANGLE_KELP).packageIndex = 17;
			_this->Get(Plant::Type::JALAPENO).packageIndex = 11;
			_this->Get(Plant::Type::SPIKEWEED).packageIndex = 22;
			_this->Get(Plant::Type::TORCHWOOD).packageIndex = 29;
			_this->Get(Plant::Type::TALL_NUT).packageIndex = 28;
			_this->Get(Plant::Type::SEA_SHROOM).packageIndex = 39;
			_this->Get(Plant::Type::PLANTERN).packageIndex = 38;
			_this->Get(Plant::Type::CACTUS).packageIndex = 15;
			_this->Get(Plant::Type::BLOVER).packageIndex = 18;
			_this->Get(Plant::Type::SPLIT_PEA).packageIndex = 32;
			_this->Get(Plant::Type::STARFRUIT).packageIndex = 30;
			_this->Get(Plant::Type::PUMPKIN).packageIndex = 25;
			_this->Get(Plant::Type::MAGNET_SHROOM).packageIndex = 35;
			_this->Get(Plant::Type::CABBAGE_PULT).packageIndex = 13;
			_this->Get(Plant::Type::FLOWER_POT).packageIndex = 33;
			_this->Get(Plant::Type::KERNEL_PULT).packageIndex = 13;
			_this->Get(Plant::Type::COFFEE_BEAN).packageIndex = 33;
			_this->Get(Plant::Type::GARLIC).packageIndex = 8;
			_this->Get(Plant::Type::UMBRELLA_LEAF).packageIndex = 23;
			_this->Get(Plant::Type::MARIGOLD).packageIndex = 24;
			_this->Get(Plant::Type::MELON_PULT).packageIndex = 14;
			_this->Get(Plant::Type::GATLING_PEA).packageIndex = 5;
			_this->Get(Plant::Type::TWIN_SUNFLOWER).packageIndex = 1;
			_this->Get(Plant::Type::GLOOM_SHROOM).packageIndex = 27;
			_this->Get(Plant::Type::CATTAIL).packageIndex = 27;
			_this->Get(Plant::Type::WINTER_MELON).packageIndex = 27;
			_this->Get(Plant::Type::GOLD_MAGNET).packageIndex = 27;
			_this->Get(Plant::Type::SPIKEROCK).packageIndex = 27;
			_this->Get(Plant::Type::COB_CANNON).packageIndex = 16;
			_this->Get(Plant::Type::IMITATER).packageIndex = 33;
			_this->Get(Plant::Type::EXPLODING_NUT).packageIndex = 2;
			_this->Get(Plant::Type::GIANT_WALL_NUT).packageIndex = 2;
			_this->Get(Plant::Type::FLOWER_BUD).packageIndex = 33;
			_this->Get(Plant::Type::REPEATER_LEFT).packageIndex = 5;
			_this->Get(Plant::Type::PEASHOOTER).atkCD = 150;
			_this->Get(Plant::Type::SUNFLOWER).atkCD = 2500;
			_this->Get(Plant::Type::CHERRY_BOMB).atkCD = 0;
			_this->Get(Plant::Type::WALL_NUT).atkCD = 0;
			_this->Get(Plant::Type::POTATO_MINE).atkCD = 0;
			_this->Get(Plant::Type::SNOW_PEA).atkCD = 150;
			_this->Get(Plant::Type::CHOMPER).atkCD = 0;
			_this->Get(Plant::Type::REPEATER).atkCD = 150;
			_this->Get(Plant::Type::PUFF_SHROOM).atkCD = 150;
			_this->Get(Plant::Type::SUN_SHROOM).atkCD = 2500;
			_this->Get(Plant::Type::FUME_SHROOM).atkCD = 150;
			_this->Get(Plant::Type::GRAVE_BUSTER).atkCD = 0;
			_this->Get(Plant::Type::HYPNO_SHROOM).atkCD = 0;
			_this->Get(Plant::Type::SCAREDY_SHROOM).atkCD = 150;
			_this->Get(Plant::Type::ICE_SHROOM).atkCD = 0;
			_this->Get(Plant::Type::DOOM_SHROOM).atkCD = 0;
			_this->Get(Plant::Type::LILY_PAD).atkCD = 0;
			_this->Get(Plant::Type::SQUASH).atkCD = 0;
			_this->Get(Plant::Type::THREEPEATER).atkCD = 150;
			_this->Get(Plant::Type::TANGLE_KELP).atkCD = 0;
			_this->Get(Plant::Type::JALAPENO).atkCD = 0;
			_this->Get(Plant::Type::SPIKEWEED).atkCD = 0;
			_this->Get(Plant::Type::TORCHWOOD).atkCD = 0;
			_this->Get(Plant::Type::TALL_NUT).atkCD = 0;
			_this->Get(Plant::Type::SEA_SHROOM).atkCD = 150;
			_this->Get(Plant::Type::PLANTERN).atkCD = 2500;
			_this->Get(Plant::Type::CACTUS).atkCD = 150;
			_this->Get(Plant::Type::BLOVER).atkCD = 0;
			_this->Get(Plant::Type::SPLIT_PEA).atkCD = 150;
			_this->Get(Plant::Type::STARFRUIT).atkCD = 150;
			_this->Get(Plant::Type::PUMPKIN).atkCD = 0;
			_this->Get(Plant::Type::MAGNET_SHROOM).atkCD = 0;
			_this->Get(Plant::Type::CABBAGE_PULT).atkCD = 300;
			_this->Get(Plant::Type::FLOWER_POT).atkCD = 0;
			_this->Get(Plant::Type::KERNEL_PULT).atkCD = 300;
			_this->Get(Plant::Type::COFFEE_BEAN).atkCD = 0;
			_this->Get(Plant::Type::GARLIC).atkCD = 0;
			_this->Get(Plant::Type::UMBRELLA_LEAF).atkCD = 0;
			_this->Get(Plant::Type::MARIGOLD).atkCD = 2500;
			_this->Get(Plant::Type::MELON_PULT).atkCD = 300;
			_this->Get(Plant::Type::GATLING_PEA).atkCD = 150;
			_this->Get(Plant::Type::TWIN_SUNFLOWER).atkCD = 2500;
			_this->Get(Plant::Type::GLOOM_SHROOM).atkCD = 200;
			_this->Get(Plant::Type::CATTAIL).atkCD = 150;
			_this->Get(Plant::Type::WINTER_MELON).atkCD = 300;
			_this->Get(Plant::Type::GOLD_MAGNET).atkCD = 0;
			_this->Get(Plant::Type::SPIKEROCK).atkCD = 0;
			_this->Get(Plant::Type::COB_CANNON).atkCD = 600;
			_this->Get(Plant::Type::IMITATER).atkCD = 0;
			_this->Get(Plant::Type::EXPLODING_NUT).atkCD = 0;
			_this->Get(Plant::Type::GIANT_WALL_NUT).atkCD = 0;
			_this->Get(Plant::Type::FLOWER_BUD).atkCD = 0;
			_this->Get(Plant::Type::REPEATER_LEFT).atkCD = 150;
			_this->Get(Plant::Type::PEASHOOTER).name = u8"PEASHOOTER";
			_this->Get(Plant::Type::SUNFLOWER).name = u8"SUNFLOWER";
			_this->Get(Plant::Type::CHERRY_BOMB).name = u8"CHERRY_BOMB";
			_this->Get(Plant::Type::WALL_NUT).name = u8"WALL_NUT";
			_this->Get(Plant::Type::POTATO_MINE).name = u8"POTATO_MINE";
			_this->Get(Plant::Type::SNOW_PEA).name = u8"SNOW_PEA";
			_this->Get(Plant::Type::CHOMPER).name = u8"CHOMPER";
			_this->Get(Plant::Type::REPEATER).name = u8"REPEATER";
			_this->Get(Plant::Type::PUFF_SHROOM).name = u8"PUFF_SHROOM";
			_this->Get(Plant::Type::SUN_SHROOM).name = u8"SUN_SHROOM";
			_this->Get(Plant::Type::FUME_SHROOM).name = u8"FUME_SHROOM";
			_this->Get(Plant::Type::GRAVE_BUSTER).name = u8"GRAVE_BUSTER";
			_this->Get(Plant::Type::HYPNO_SHROOM).name = u8"HYPNO_SHROOM";
			_this->Get(Plant::Type::SCAREDY_SHROOM).name = u8"SCAREDY_SHROOM";
			_this->Get(Plant::Type::ICE_SHROOM).name = u8"ICE_SHROOM";
			_this->Get(Plant::Type::DOOM_SHROOM).name = u8"DOOM_SHROOM";
			_this->Get(Plant::Type::LILY_PAD).name = u8"LILY_PAD";
			_this->Get(Plant::Type::SQUASH).name = u8"SQUASH";
			_this->Get(Plant::Type::THREEPEATER).name = u8"THREEPEATER";
			_this->Get(Plant::Type::TANGLE_KELP).name = u8"TANGLE_KELP";
			_this->Get(Plant::Type::JALAPENO).name = u8"JALAPENO";
			_this->Get(Plant::Type::SPIKEWEED).name = u8"SPIKEWEED";
			_this->Get(Plant::Type::TORCHWOOD).name = u8"TORCHWOOD";
			_this->Get(Plant::Type::TALL_NUT).name = u8"TALL_NUT";
			_this->Get(Plant::Type::SEA_SHROOM).name = u8"SEA_SHROOM";
			_this->Get(Plant::Type::PLANTERN).name = u8"PLANTERN";
			_this->Get(Plant::Type::CACTUS).name = u8"CACTUS";
			_this->Get(Plant::Type::BLOVER).name = u8"BLOVER";
			_this->Get(Plant::Type::SPLIT_PEA).name = u8"SPLIT_PEA";
			_this->Get(Plant::Type::STARFRUIT).name = u8"STARFRUIT";
			_this->Get(Plant::Type::PUMPKIN).name = u8"PUMPKIN";
			_this->Get(Plant::Type::MAGNET_SHROOM).name = u8"MAGNET_SHROOM";
			_this->Get(Plant::Type::CABBAGE_PULT).name = u8"CABBAGE_PULT";
			_this->Get(Plant::Type::FLOWER_POT).name = u8"FLOWER_POT";
			_this->Get(Plant::Type::KERNEL_PULT).name = u8"KERNEL_PULT";
			_this->Get(Plant::Type::COFFEE_BEAN).name = u8"COFFEE_BEAN";
			_this->Get(Plant::Type::GARLIC).name = u8"GARLIC";
			_this->Get(Plant::Type::UMBRELLA_LEAF).name = u8"UMBRELLA_LEAF";
			_this->Get(Plant::Type::MARIGOLD).name = u8"MARIGOLD";
			_this->Get(Plant::Type::MELON_PULT).name = u8"MELON_PULT";
			_this->Get(Plant::Type::GATLING_PEA).name = u8"GATLING_PEA";
			_this->Get(Plant::Type::TWIN_SUNFLOWER).name = u8"TWIN_SUNFLOWER";
			_this->Get(Plant::Type::GLOOM_SHROOM).name = u8"GLOOM_SHROOM";
			_this->Get(Plant::Type::CATTAIL).name = u8"CATTAIL";
			_this->Get(Plant::Type::WINTER_MELON).name = u8"WINTER_MELON";
			_this->Get(Plant::Type::GOLD_MAGNET).name = u8"GOLD_MAGNET";
			_this->Get(Plant::Type::SPIKEROCK).name = u8"SPIKEROCK";
			_this->Get(Plant::Type::COB_CANNON).name = u8"COB_CANNON";
			_this->Get(Plant::Type::IMITATER).name = u8"IMITATER";
			_this->Get(Plant::Type::EXPLODING_NUT).name = u8"EXPLODE_O_NUT";
			_this->Get(Plant::Type::GIANT_WALL_NUT).name = u8"GIANT_WALLNUT";
			_this->Get(Plant::Type::FLOWER_BUD).name = u8"SPROUT";
			_this->Get(Plant::Type::REPEATER_LEFT).name = u8"REPEATER";
			_this->Get(Plant::Type::SUNFLOWER).Func_update = &Plant::UpdateProducer;
			_this->Get(Plant::Type::TWIN_SUNFLOWER).Func_update = &Plant::UpdateProducer;
			_this->Get(Plant::Type::MARIGOLD).Func_update = &Plant::UpdateProducer;
			_this->Get(Plant::Type::POTATO_MINE).Func_update = &Plant::UpdatePotatomone;
			_this->Get(Plant::Type::CHOMPER).Func_update = &Plant::UpdateChomper;
			_this->Get(Plant::Type::SUN_SHROOM).Func_update = &Plant::UpdateSunshroom;
			_this->Get(Plant::Type::GRAVE_BUSTER).Func_update = &Plant::UpdateGravebuster;
			_this->Get(Plant::Type::SCAREDY_SHROOM).Func_update = &Plant::UpdateScardyshroom;
			_this->Get(Plant::Type::ICE_SHROOM).Func_update = &Plant::UpdateIceshroom;
			_this->Get(Plant::Type::DOOM_SHROOM).Func_update = &Plant::UpdateDoomshroom;
			_this->Get(Plant::Type::LILY_PAD).Func_update = &Plant::UpdateLilypad;
			_this->Get(Plant::Type::SQUASH).Func_update = &Plant::UpdateSquash;
			_this->Get(Plant::Type::TANGLE_KELP).Func_update = &Plant::UpdateTanglekelp;
			_this->Get(Plant::Type::SPIKEWEED).Func_update = &Plant::UpdateSpike;
			_this->Get(Plant::Type::SPIKEROCK).Func_update = &Plant::UpdateSpike;
			_this->Get(Plant::Type::TORCHWOOD).Func_update = &Plant::UpdateTorchwood;
			_this->Get(Plant::Type::CACTUS).Func_update = &Plant::UpdateCactus;
			_this->Get(Plant::Type::BLOVER).Func_update = &Plant::UpdateBlover;
			_this->Get(Plant::Type::MAGNET_SHROOM).Func_update = &Plant::UpdateMagnetshroom;
			_this->Get(Plant::Type::FLOWER_POT).Func_update = &Plant::UpdateFlowerpot;
			_this->Get(Plant::Type::COFFEE_BEAN).Func_update = &Plant::UpdateCoffeeBean;
			_this->Get(Plant::Type::UMBRELLA_LEAF).Func_update = &Plant::UpdateUmbrellaleaf;
			_this->Get(Plant::Type::GOLD_MAGNET).Func_update = &Plant::UpdateGoldmagnet;
			_this->Get(Plant::Type::COB_CANNON).Func_update = &Plant::UpdateCobcannon;
			_this->Get(Plant::Type::IMITATER).Func_update = &Plant::UpdateImitater;
			}
#endif
			);
	DefineBasicProp(Plant, BaseProp_Plant);
	template<>struct BaseProp<Zombie> {
		bool canEnterWater = false;
		Anim::Type animType = Anim::Type::NIL;
		Card::Type cardType = Card::Type::NIL;
		int value = 0;
		int initLevel = 0;
		int initWave = 0;
		int weight = 0;
		string name = u8"";
		Cvp::Functor<void(Zombie*)> Func_act = Cvp::Functor<void(Zombie*)>();
		Cvp::Functor<void(Zombie*)> Func_resetSpeed = [](Zombie* _this) {_this->v = rand(0.23f, 0.37f); };
	};
	__declspec(selectany) BasePropInterface<Zombie>BaseProp_Zombie(u8"Base"
#ifndef CVP
			, [](BasePropInterface<Zombie>* _this){
			_this->Get(Zombie::Type::ZOMBIE).canEnterWater = true;
			_this->Get(Zombie::Type::CONEHEAD_ZOMBIE).canEnterWater = true;
			_this->Get(Zombie::Type::BUCKETHEAD_ZOMBIE).canEnterWater = true;
			_this->Get(Zombie::Type::FLAG_ZOMBIE).canEnterWater = true;
			_this->Get(Zombie::Type::SNORKEL_ZOMBIE).canEnterWater = true;
			_this->Get(Zombie::Type::DOLPHIN_RIDER_ZOMBIE).canEnterWater = true;
			_this->Get(Zombie::Type::PEASHOOTER).canEnterWater = true;
			_this->Get(Zombie::Type::WALL_NUT).canEnterWater = true;
			_this->Get(Zombie::Type::JALAPENO).canEnterWater = true;
			_this->Get(Zombie::Type::GATLING_PEA).canEnterWater = true;
			_this->Get(Zombie::Type::TALL_NUT).canEnterWater = true;
			_this->Get(Zombie::Type::ZOMBIE).animType = Anim::Type::ZOMBIE;
			_this->Get(Zombie::Type::FLAG_ZOMBIE).animType = Anim::Type::ZOMBIE;
			_this->Get(Zombie::Type::CONEHEAD_ZOMBIE).animType = Anim::Type::ZOMBIE;
			_this->Get(Zombie::Type::POLE_VAULTING_ZOMBIE).animType = Anim::Type::POLEVAULTER;
			_this->Get(Zombie::Type::BUCKETHEAD_ZOMBIE).animType = Anim::Type::ZOMBIE;
			_this->Get(Zombie::Type::NEWSPAPER_ZOMBIE).animType = Anim::Type::ZOMBIE_NEWSPAPER;
			_this->Get(Zombie::Type::SCREEN_DOOR_ZOMBIE).animType = Anim::Type::ZOMBIE;
			_this->Get(Zombie::Type::FOOTBALL_ZOMBIE).animType = Anim::Type::ZOMBIE_FOOTBALL;
			_this->Get(Zombie::Type::DANCING_ZOMBIE).animType = Anim::Type::DISCO;
			_this->Get(Zombie::Type::BACKUP_DANCER).animType = Anim::Type::BACKUP_DANCER;
			_this->Get(Zombie::Type::DUCKY_TUBE_ZOMBIE).animType = Anim::Type::ZOMBIE;
			_this->Get(Zombie::Type::SNORKEL_ZOMBIE).animType = Anim::Type::SNORKEL;
			_this->Get(Zombie::Type::ZOMBONI).animType = Anim::Type::ZOMBIE_ZOMBONI;
			_this->Get(Zombie::Type::ZOMBIE_BOBSLED_TEAM).animType = Anim::Type::BOBSLED;
			_this->Get(Zombie::Type::DOLPHIN_RIDER_ZOMBIE).animType = Anim::Type::ZOMBIE_DOLPHINRIDER;
			_this->Get(Zombie::Type::JACK_IN_THE_BOX_ZOMBIE).animType = Anim::Type::JACKINTHEBOX;
			_this->Get(Zombie::Type::BALLOON_ZOMBIE).animType = Anim::Type::BALLOON;
			_this->Get(Zombie::Type::DIGGER_ZOMBIE).animType = Anim::Type::DIGGER;
			_this->Get(Zombie::Type::POGO_ZOMBIE).animType = Anim::Type::POGO;
			_this->Get(Zombie::Type::YETI_ZOMBIE).animType = Anim::Type::YETI;
			_this->Get(Zombie::Type::BUNGEE_ZOMBIE).animType = Anim::Type::BUNGEE;
			_this->Get(Zombie::Type::LADDER_ZOMBIE).animType = Anim::Type::LADDER;
			_this->Get(Zombie::Type::CATAPULT_ZOMBIE).animType = Anim::Type::CATAPULT;
			_this->Get(Zombie::Type::GARGANTUAR).animType = Anim::Type::GARGANTUAR;
			_this->Get(Zombie::Type::IMP).animType = Anim::Type::IMP;
			_this->Get(Zombie::Type::ZOMBOSS).animType = Anim::Type::BOSS;
			_this->Get(Zombie::Type::PEASHOOTER).animType = Anim::Type::ZOMBIE;
			_this->Get(Zombie::Type::WALL_NUT).animType = Anim::Type::ZOMBIE;
			_this->Get(Zombie::Type::JALAPENO).animType = Anim::Type::ZOMBIE;
			_this->Get(Zombie::Type::GATLING_PEA).animType = Anim::Type::ZOMBIE;
			_this->Get(Zombie::Type::SQUASH).animType = Anim::Type::ZOMBIE;
			_this->Get(Zombie::Type::TALL_NUT).animType = Anim::Type::ZOMBIE;
			_this->Get(Zombie::Type::GIGA_GARGANTUAR).animType = Anim::Type::GARGANTUAR;
			_this->Get(Zombie::Type::ZOMBIE).cardType = Card::Type::ZOMBIE_NORMAL;
			_this->Get(Zombie::Type::CONEHEAD_ZOMBIE).cardType = Card::Type::ZOMBIE_CONEHEAD;
			_this->Get(Zombie::Type::POLE_VAULTING_ZOMBIE).cardType = Card::Type::ZOMBIE_POLE_VAULTER;
			_this->Get(Zombie::Type::BUCKETHEAD_ZOMBIE).cardType = Card::Type::ZOMBIE_BUCKEDHEAD;
			_this->Get(Zombie::Type::SCREEN_DOOR_ZOMBIE).cardType = Card::Type::ZOMBIE_SCREEN_DOOR;
			_this->Get(Zombie::Type::FOOTBALL_ZOMBIE).cardType = Card::Type::ZOMBIE_FOOTBALL;
			_this->Get(Zombie::Type::DANCING_ZOMBIE).cardType = Card::Type::ZOMBIE_DANCER;
			_this->Get(Zombie::Type::BALLOON_ZOMBIE).cardType = Card::Type::ZOMBIE_BALLOON;
			_this->Get(Zombie::Type::DIGGER_ZOMBIE).cardType = Card::Type::ZOMBIE_DIGGER;
			_this->Get(Zombie::Type::BUNGEE_ZOMBIE).cardType = Card::Type::ZOMBIE_BUNGEE;
			_this->Get(Zombie::Type::LADDER_ZOMBIE).cardType = Card::Type::ZOMBIE_LADDER;
			_this->Get(Zombie::Type::GARGANTUAR).cardType = Card::Type::ZOMBIE_GARGANTUAR;
			_this->Get(Zombie::Type::IMP).cardType = Card::Type::ZOMBIE_IMP;
			_this->Get(Zombie::Type::ZOMBIE).value = 1;
			_this->Get(Zombie::Type::FLAG_ZOMBIE).value = 1;
			_this->Get(Zombie::Type::CONEHEAD_ZOMBIE).value = 2;
			_this->Get(Zombie::Type::POLE_VAULTING_ZOMBIE).value = 2;
			_this->Get(Zombie::Type::BUCKETHEAD_ZOMBIE).value = 4;
			_this->Get(Zombie::Type::NEWSPAPER_ZOMBIE).value = 2;
			_this->Get(Zombie::Type::SCREEN_DOOR_ZOMBIE).value = 4;
			_this->Get(Zombie::Type::FOOTBALL_ZOMBIE).value = 7;
			_this->Get(Zombie::Type::DANCING_ZOMBIE).value = 5;
			_this->Get(Zombie::Type::BACKUP_DANCER).value = 1;
			_this->Get(Zombie::Type::DUCKY_TUBE_ZOMBIE).value = 1;
			_this->Get(Zombie::Type::SNORKEL_ZOMBIE).value = 3;
			_this->Get(Zombie::Type::ZOMBONI).value = 7;
			_this->Get(Zombie::Type::ZOMBIE_BOBSLED_TEAM).value = 3;
			_this->Get(Zombie::Type::DOLPHIN_RIDER_ZOMBIE).value = 3;
			_this->Get(Zombie::Type::JACK_IN_THE_BOX_ZOMBIE).value = 3;
			_this->Get(Zombie::Type::BALLOON_ZOMBIE).value = 2;
			_this->Get(Zombie::Type::DIGGER_ZOMBIE).value = 4;
			_this->Get(Zombie::Type::POGO_ZOMBIE).value = 4;
			_this->Get(Zombie::Type::YETI_ZOMBIE).value = 4;
			_this->Get(Zombie::Type::BUNGEE_ZOMBIE).value = 3;
			_this->Get(Zombie::Type::LADDER_ZOMBIE).value = 4;
			_this->Get(Zombie::Type::CATAPULT_ZOMBIE).value = 5;
			_this->Get(Zombie::Type::GARGANTUAR).value = 10;
			_this->Get(Zombie::Type::IMP).value = 10;
			_this->Get(Zombie::Type::ZOMBOSS).value = 10;
			_this->Get(Zombie::Type::PEASHOOTER).value = 1;
			_this->Get(Zombie::Type::WALL_NUT).value = 4;
			_this->Get(Zombie::Type::JALAPENO).value = 3;
			_this->Get(Zombie::Type::GATLING_PEA).value = 3;
			_this->Get(Zombie::Type::SQUASH).value = 3;
			_this->Get(Zombie::Type::TALL_NUT).value = 4;
			_this->Get(Zombie::Type::GIGA_GARGANTUAR).value = 10;
			_this->Get(Zombie::Type::ZOMBIE).initLevel = 1;
			_this->Get(Zombie::Type::FLAG_ZOMBIE).initLevel = 1;
			_this->Get(Zombie::Type::CONEHEAD_ZOMBIE).initLevel = 3;
			_this->Get(Zombie::Type::POLE_VAULTING_ZOMBIE).initLevel = 6;
			_this->Get(Zombie::Type::BUCKETHEAD_ZOMBIE).initLevel = 8;
			_this->Get(Zombie::Type::NEWSPAPER_ZOMBIE).initLevel = 11;
			_this->Get(Zombie::Type::SCREEN_DOOR_ZOMBIE).initLevel = 13;
			_this->Get(Zombie::Type::FOOTBALL_ZOMBIE).initLevel = 16;
			_this->Get(Zombie::Type::DANCING_ZOMBIE).initLevel = 18;
			_this->Get(Zombie::Type::BACKUP_DANCER).initLevel = 18;
			_this->Get(Zombie::Type::DUCKY_TUBE_ZOMBIE).initLevel = 21;
			_this->Get(Zombie::Type::SNORKEL_ZOMBIE).initLevel = 23;
			_this->Get(Zombie::Type::ZOMBONI).initLevel = 26;
			_this->Get(Zombie::Type::ZOMBIE_BOBSLED_TEAM).initLevel = 28;
			_this->Get(Zombie::Type::DOLPHIN_RIDER_ZOMBIE).initLevel = 28;
			_this->Get(Zombie::Type::JACK_IN_THE_BOX_ZOMBIE).initLevel = 31;
			_this->Get(Zombie::Type::BALLOON_ZOMBIE).initLevel = 33;
			_this->Get(Zombie::Type::DIGGER_ZOMBIE).initLevel = 36;
			_this->Get(Zombie::Type::POGO_ZOMBIE).initLevel = 38;
			_this->Get(Zombie::Type::YETI_ZOMBIE).initLevel = 40;
			_this->Get(Zombie::Type::BUNGEE_ZOMBIE).initLevel = 41;
			_this->Get(Zombie::Type::LADDER_ZOMBIE).initLevel = 43;
			_this->Get(Zombie::Type::CATAPULT_ZOMBIE).initLevel = 46;
			_this->Get(Zombie::Type::GARGANTUAR).initLevel = 48;
			_this->Get(Zombie::Type::IMP).initLevel = 48;
			_this->Get(Zombie::Type::ZOMBOSS).initLevel = 50;
			_this->Get(Zombie::Type::PEASHOOTER).initLevel = 99;
			_this->Get(Zombie::Type::WALL_NUT).initLevel = 99;
			_this->Get(Zombie::Type::JALAPENO).initLevel = 99;
			_this->Get(Zombie::Type::GATLING_PEA).initLevel = 99;
			_this->Get(Zombie::Type::SQUASH).initLevel = 99;
			_this->Get(Zombie::Type::TALL_NUT).initLevel = 99;
			_this->Get(Zombie::Type::GIGA_GARGANTUAR).initLevel = 48;
			_this->Get(Zombie::Type::ZOMBIE).initWave = 1;
			_this->Get(Zombie::Type::FLAG_ZOMBIE).initWave = 1;
			_this->Get(Zombie::Type::CONEHEAD_ZOMBIE).initWave = 1;
			_this->Get(Zombie::Type::POLE_VAULTING_ZOMBIE).initWave = 5;
			_this->Get(Zombie::Type::BUCKETHEAD_ZOMBIE).initWave = 1;
			_this->Get(Zombie::Type::NEWSPAPER_ZOMBIE).initWave = 1;
			_this->Get(Zombie::Type::SCREEN_DOOR_ZOMBIE).initWave = 5;
			_this->Get(Zombie::Type::FOOTBALL_ZOMBIE).initWave = 5;
			_this->Get(Zombie::Type::DANCING_ZOMBIE).initWave = 5;
			_this->Get(Zombie::Type::BACKUP_DANCER).initWave = 1;
			_this->Get(Zombie::Type::DUCKY_TUBE_ZOMBIE).initWave = 5;
			_this->Get(Zombie::Type::SNORKEL_ZOMBIE).initWave = 10;
			_this->Get(Zombie::Type::ZOMBONI).initWave = 10;
			_this->Get(Zombie::Type::ZOMBIE_BOBSLED_TEAM).initWave = 10;
			_this->Get(Zombie::Type::DOLPHIN_RIDER_ZOMBIE).initWave = 10;
			_this->Get(Zombie::Type::JACK_IN_THE_BOX_ZOMBIE).initWave = 10;
			_this->Get(Zombie::Type::BALLOON_ZOMBIE).initWave = 10;
			_this->Get(Zombie::Type::DIGGER_ZOMBIE).initWave = 10;
			_this->Get(Zombie::Type::POGO_ZOMBIE).initWave = 10;
			_this->Get(Zombie::Type::YETI_ZOMBIE).initWave = 1;
			_this->Get(Zombie::Type::BUNGEE_ZOMBIE).initWave = 10;
			_this->Get(Zombie::Type::LADDER_ZOMBIE).initWave = 10;
			_this->Get(Zombie::Type::CATAPULT_ZOMBIE).initWave = 10;
			_this->Get(Zombie::Type::GARGANTUAR).initWave = 15;
			_this->Get(Zombie::Type::IMP).initWave = 1;
			_this->Get(Zombie::Type::ZOMBOSS).initWave = 1;
			_this->Get(Zombie::Type::PEASHOOTER).initWave = 1;
			_this->Get(Zombie::Type::WALL_NUT).initWave = 1;
			_this->Get(Zombie::Type::JALAPENO).initWave = 10;
			_this->Get(Zombie::Type::GATLING_PEA).initWave = 10;
			_this->Get(Zombie::Type::SQUASH).initWave = 10;
			_this->Get(Zombie::Type::TALL_NUT).initWave = 10;
			_this->Get(Zombie::Type::GIGA_GARGANTUAR).initWave = 15;
			_this->Get(Zombie::Type::ZOMBIE).weight = 4000;
			_this->Get(Zombie::Type::FLAG_ZOMBIE).weight = 0;
			_this->Get(Zombie::Type::CONEHEAD_ZOMBIE).weight = 4000;
			_this->Get(Zombie::Type::POLE_VAULTING_ZOMBIE).weight = 2000;
			_this->Get(Zombie::Type::BUCKETHEAD_ZOMBIE).weight = 3000;
			_this->Get(Zombie::Type::NEWSPAPER_ZOMBIE).weight = 1000;
			_this->Get(Zombie::Type::SCREEN_DOOR_ZOMBIE).weight = 3500;
			_this->Get(Zombie::Type::FOOTBALL_ZOMBIE).weight = 2000;
			_this->Get(Zombie::Type::DANCING_ZOMBIE).weight = 1000;
			_this->Get(Zombie::Type::BACKUP_DANCER).weight = 0;
			_this->Get(Zombie::Type::DUCKY_TUBE_ZOMBIE).weight = 0;
			_this->Get(Zombie::Type::SNORKEL_ZOMBIE).weight = 2000;
			_this->Get(Zombie::Type::ZOMBONI).weight = 2000;
			_this->Get(Zombie::Type::ZOMBIE_BOBSLED_TEAM).weight = 2000;
			_this->Get(Zombie::Type::DOLPHIN_RIDER_ZOMBIE).weight = 1500;
			_this->Get(Zombie::Type::JACK_IN_THE_BOX_ZOMBIE).weight = 1000;
			_this->Get(Zombie::Type::BALLOON_ZOMBIE).weight = 2000;
			_this->Get(Zombie::Type::DIGGER_ZOMBIE).weight = 1000;
			_this->Get(Zombie::Type::POGO_ZOMBIE).weight = 1000;
			_this->Get(Zombie::Type::YETI_ZOMBIE).weight = 1;
			_this->Get(Zombie::Type::BUNGEE_ZOMBIE).weight = 1000;
			_this->Get(Zombie::Type::LADDER_ZOMBIE).weight = 1000;
			_this->Get(Zombie::Type::CATAPULT_ZOMBIE).weight = 1500;
			_this->Get(Zombie::Type::GARGANTUAR).weight = 1500;
			_this->Get(Zombie::Type::IMP).weight = 0;
			_this->Get(Zombie::Type::ZOMBOSS).weight = 0;
			_this->Get(Zombie::Type::PEASHOOTER).weight = 4000;
			_this->Get(Zombie::Type::WALL_NUT).weight = 3000;
			_this->Get(Zombie::Type::JALAPENO).weight = 1000;
			_this->Get(Zombie::Type::GATLING_PEA).weight = 2000;
			_this->Get(Zombie::Type::SQUASH).weight = 2000;
			_this->Get(Zombie::Type::TALL_NUT).weight = 2000;
			_this->Get(Zombie::Type::GIGA_GARGANTUAR).weight = 6000;
			_this->Get(Zombie::Type::ZOMBIE).name = u8"ZOMBIE";
			_this->Get(Zombie::Type::FLAG_ZOMBIE).name = u8"FLAG_ZOMBIE";
			_this->Get(Zombie::Type::CONEHEAD_ZOMBIE).name = u8"CONEHEAD_ZOMBIE";
			_this->Get(Zombie::Type::POLE_VAULTING_ZOMBIE).name = u8"POLE_VAULTING_ZOMBIE";
			_this->Get(Zombie::Type::BUCKETHEAD_ZOMBIE).name = u8"BUCKETHEAD_ZOMBIE";
			_this->Get(Zombie::Type::NEWSPAPER_ZOMBIE).name = u8"ZOMBIE_NEWSPAPER";
			_this->Get(Zombie::Type::SCREEN_DOOR_ZOMBIE).name = u8"SCREEN_DOOR_ZOMBIE";
			_this->Get(Zombie::Type::FOOTBALL_ZOMBIE).name = u8"ZOMBIE_FOOTBALL";
			_this->Get(Zombie::Type::DANCING_ZOMBIE).name = u8"DANCING_ZOMBIE";
			_this->Get(Zombie::Type::BACKUP_DANCER).name = u8"BACKUP_DANCER";
			_this->Get(Zombie::Type::DUCKY_TUBE_ZOMBIE).name = u8"DUCKY_TUBE_ZOMBIE";
			_this->Get(Zombie::Type::SNORKEL_ZOMBIE).name = u8"SNORKEL_ZOMBIE";
			_this->Get(Zombie::Type::ZOMBONI).name = u8"ZOMBONI";
			_this->Get(Zombie::Type::ZOMBIE_BOBSLED_TEAM).name = u8"ZOMBIE_BOBSLED_TEAM";
			_this->Get(Zombie::Type::DOLPHIN_RIDER_ZOMBIE).name = u8"DOLPHIN_RIDER_ZOMBIE";
			_this->Get(Zombie::Type::JACK_IN_THE_BOX_ZOMBIE).name = u8"JACK_IN_THE_BOX_ZOMBIE";
			_this->Get(Zombie::Type::BALLOON_ZOMBIE).name = u8"BALLOON_ZOMBIE";
			_this->Get(Zombie::Type::DIGGER_ZOMBIE).name = u8"DIGGER_ZOMBIE";
			_this->Get(Zombie::Type::POGO_ZOMBIE).name = u8"POGO_ZOMBIE";
			_this->Get(Zombie::Type::YETI_ZOMBIE).name = u8"ZOMBIE_YETI";
			_this->Get(Zombie::Type::BUNGEE_ZOMBIE).name = u8"BUNGEE_ZOMBIE";
			_this->Get(Zombie::Type::LADDER_ZOMBIE).name = u8"LADDER_ZOMBIE";
			_this->Get(Zombie::Type::CATAPULT_ZOMBIE).name = u8"CATAPULT_ZOMBIE";
			_this->Get(Zombie::Type::GARGANTUAR).name = u8"GARGANTUAR";
			_this->Get(Zombie::Type::IMP).name = u8"IMP";
			_this->Get(Zombie::Type::ZOMBOSS).name = u8"BOSS";
			_this->Get(Zombie::Type::PEASHOOTER).name = u8"ZOMBIE";
			_this->Get(Zombie::Type::WALL_NUT).name = u8"ZOMBIE";
			_this->Get(Zombie::Type::JALAPENO).name = u8"ZOMBIE";
			_this->Get(Zombie::Type::GATLING_PEA).name = u8"ZOMBIE";
			_this->Get(Zombie::Type::SQUASH).name = u8"ZOMBIE";
			_this->Get(Zombie::Type::TALL_NUT).name = u8"ZOMBIE";
			_this->Get(Zombie::Type::GIGA_GARGANTUAR).name = u8"REDEYED_GARGANTUAR";
			_this->Get(Zombie::Type::POLE_VAULTING_ZOMBIE).Func_act = [](Zombie* _this) {
				if (_this->state == Zombie::State::POLE_VAULTING_WALK && !_this->zombossFireBall) { _this->zombossFireBall = true; _this->ResetSpeed(); }
				_this->UpdatePole();
				if (_this->state == Zombie::State::POLE_VAULTING_WALK && !_this->zombossFireBall) { _this->zombossFireBall = true; _this->ResetSpeed(); }
			};
			_this->Get(Zombie::Type::CATAPULT_ZOMBIE).Func_act = &Zombie::UpdateCatapult;
			_this->Get(Zombie::Type::DOLPHIN_RIDER_ZOMBIE).Func_act = &Zombie::UpdateDolphin;
			_this->Get(Zombie::Type::SNORKEL_ZOMBIE).Func_act = &Zombie::UpdateSnorkle;
			_this->Get(Zombie::Type::BALLOON_ZOMBIE).Func_act = &Zombie::UpdateBalloon;
			_this->Get(Zombie::Type::NEWSPAPER_ZOMBIE).Func_act = &Zombie::UpdateNewspaper;
			_this->Get(Zombie::Type::DIGGER_ZOMBIE).Func_act = [](Zombie* _this) {
				if (_this->state == Zombie::State::DIGGER_WALKLEFT && !_this->zombossFireBall) { _this->zombossFireBall = true; _this->ResetSpeed(); }
				_this->UpdateDigger();
				if (_this->state == Zombie::State::DIGGER_WALKLEFT && !_this->zombossFireBall) { _this->zombossFireBall = true; _this->ResetSpeed(); }
			};
			_this->Get(Zombie::Type::JACK_IN_THE_BOX_ZOMBIE).Func_act = &Zombie::UpdateJack;
			_this->Get(Zombie::Type::GARGANTUAR).Func_act = &Zombie::UpdateGargantuar;
			_this->Get(Zombie::Type::GIGA_GARGANTUAR).Func_act = &Zombie::UpdateGargantuar;
			_this->Get(Zombie::Type::ZOMBIE_BOBSLED_TEAM).Func_act = &Zombie::UpdateBobsled;
			_this->Get(Zombie::Type::ZOMBONI).Func_act = &Zombie::UpdateZomboni;
			_this->Get(Zombie::Type::LADDER_ZOMBIE).Func_act = [](Zombie* _this) {
				if (_this->state == Zombie::State::NIL && !_this->zombossFireBall) { _this->zombossFireBall = true; _this->ResetSpeed(); }
				_this->UpdateLadder();
				if (_this->state == Zombie::State::NIL && !_this->zombossFireBall) { _this->zombossFireBall = true; _this->ResetSpeed(); }
			};
			_this->Get(Zombie::Type::YETI_ZOMBIE).Func_act = &Zombie::UpdateYeti;
			_this->Get(Zombie::Type::DANCING_ZOMBIE).Func_act = &Zombie::UpdateMJ;
			_this->Get(Zombie::Type::BACKUP_DANCER).Func_act = &Zombie::UpdateDancer;
			_this->Get(Zombie::Type::IMP).Func_act = &Zombie::UpdateIMP;
			_this->Get(Zombie::Type::PEASHOOTER).Func_act = &Zombie::UpdatePeashooter;
			_this->Get(Zombie::Type::JALAPENO).Func_act = &Zombie::UpdateJalapeno;
			_this->Get(Zombie::Type::GATLING_PEA).Func_act = &Zombie::UpdateGatling;
			_this->Get(Zombie::Type::SQUASH).Func_act = &Zombie::UpdateSquash;
			_this->Get(Zombie::Type::FLAG_ZOMBIE).Func_resetSpeed = [](Zombie* _this) {_this->v = 0.45f; };
			_this->Get(Zombie::Type::POLE_VAULTING_ZOMBIE).Func_resetSpeed = [](Zombie* _this) {_this->v = _this->state == Zombie::State::POLE_VAULTING_RUN ? rand(0.66f, 0.68f) : rand(0.23f, 0.37f); };
			_this->Get(Zombie::Type::NEWSPAPER_ZOMBIE).Func_resetSpeed = [](Zombie* _this) {_this->v = _this->state == Zombie::State::NEWSPAPER_ANGRY ? rand(0.89f, 0.91f) : rand(0.23f, 0.37f); };
			_this->Get(Zombie::Type::FOOTBALL_ZOMBIE).Func_resetSpeed = [](Zombie* _this) {_this->v = rand(0.66f, 0.68f); };
			_this->Get(Zombie::Type::DANCING_ZOMBIE).Func_resetSpeed = [](Zombie* _this) {_this->v = 0.45f; };
			_this->Get(Zombie::Type::BACKUP_DANCER).Func_resetSpeed = [](Zombie* _this) {_this->v = 0.45f; };
			_this->Get(Zombie::Type::SNORKEL_ZOMBIE).Func_resetSpeed = [](Zombie* _this) {_this->v = _this->state == Zombie::State::SNORKEL_SWIM ? 0.3f : rand(0.66f, 0.68f); };
			_this->Get(Zombie::Type::DOLPHIN_RIDER_ZOMBIE).Func_resetSpeed = [](Zombie* _this) {_this->v = (_this->state == Zombie::State::DOLPHIN_WALK || _this->state == Zombie::State::DOLPHIN_WALK_EMPTY_HAND) ? rand(0.89f, 0.91f) : rand(0.23f, 0.37f); };
			_this->Get(Zombie::Type::JACK_IN_THE_BOX_ZOMBIE).Func_resetSpeed = [](Zombie* _this) {_this->v = rand(0.66f, 0.68f); };
			_this->Get(Zombie::Type::DIGGER_ZOMBIE).Func_resetSpeed = [](Zombie* _this) {_this->v = _this->state == Zombie::State::DIGGER_WALKRIGHT ? (_this->mApp->isIZ() ? 0.23f : 0.12f) : (_this->state == Zombie::State::DIGGER_DIG ? rand(0.66f, 0.68f) : rand(0.23f, 0.37f)); };
			_this->Get(Zombie::Type::POGO_ZOMBIE).Func_resetSpeed = [](Zombie* _this) {_this->v = 0.45f; };
			_this->Get(Zombie::Type::YETI_ZOMBIE).Func_resetSpeed = [](Zombie* _this) {_this->v = _this->state == Zombie::State::YETI_ESCAPE ? 0.8f : 0.4f; };
			_this->Get(Zombie::Type::LADDER_ZOMBIE).Func_resetSpeed = [](Zombie* _this) {_this->v = _this->state == Zombie::State::LADDER_RUN ? rand(0.79f, 0.81f) : rand(0.23f, 0.37f); };
			_this->Get(Zombie::Type::IMP).Func_resetSpeed = [](Zombie* _this) {_this->v = _this->mApp->isIZ() ? 0.9f : rand(0.23f, 0.37f); };
			_this->Get(Zombie::Type::SQUASH).Func_resetSpeed = [](Zombie* _this) {_this->v = rand(0.79f, 0.81f); };
			}
#endif
			);
			DefineBasicProp(Zombie, BaseProp_Zombie);
	template<>struct BaseProp<Bullet> {
		int damage = 0;
	};
	__declspec(selectany) BasePropInterface<Bullet>BaseProp_Bullet(u8"Base"
#ifndef CVP
			, [](BasePropInterface<Bullet>* _this){
			_this->Get(Bullet::Type::PEA).damage = 20;
			_this->Get(Bullet::Type::SNOW_PEA).damage = 20;
			_this->Get(Bullet::Type::CABBAGE).damage = 40;
			_this->Get(Bullet::Type::MELON).damage = 80;
			_this->Get(Bullet::Type::PUFF).damage = 20;
			_this->Get(Bullet::Type::SNOW_MELON).damage = 80;
			_this->Get(Bullet::Type::FIRE_PEA).damage = 40;
			_this->Get(Bullet::Type::STAR).damage = 20;
			_this->Get(Bullet::Type::SPIKE).damage = 20;
			_this->Get(Bullet::Type::ZOMBIE_BALL).damage = 75;
			_this->Get(Bullet::Type::KERNEL).damage = 20;
			_this->Get(Bullet::Type::BOMB).damage = 300;
			_this->Get(Bullet::Type::BUTTER).damage = 40;
			_this->Get(Bullet::Type::ZOMBIE_PEA).damage = 20;
			}
#endif
		);
	DefineBasicProp(Bullet, BaseProp_Bullet);
	template<>struct BaseProp<Card> {
		bool inWater = false;
		Plant::Type upgradeBase = Plant::Type::NIL;
		union {
			Plant::Type plantType;
			Zombie::Type zombieType;
		};
		Card::TypeGroup typeGroup = Card::TypeGroup::NIL;
		int cost = 0;
		int CD = 0;
	};
	__declspec(selectany) BasePropInterface<Card>BaseProp_Card(u8"Base"
#ifndef CVP
			, [](BasePropInterface<Card>* _this){
			_this->Get(Card::Type::LILY_PAD).inWater = true;
			_this->Get(Card::Type::TANGLE_KELP).inWater = true;
			_this->Get(Card::Type::SEA_SHROOM).inWater = true;
			_this->Get(Card::Type::CATTAIL).inWater = true;
			_this->Get(Card::Type::GATLING_PEA).upgradeBase = Plant::Type::REPEATER;
			_this->Get(Card::Type::TWIN_SUNFLOWER).upgradeBase = Plant::Type::SUNFLOWER;
			_this->Get(Card::Type::GLOOM_SHROOM).upgradeBase = Plant::Type::FUME_SHROOM;
			_this->Get(Card::Type::CATTAIL).upgradeBase = Plant::Type::LILY_PAD;
			_this->Get(Card::Type::WINTER_MELON).upgradeBase = Plant::Type::MELON_PULT;
			_this->Get(Card::Type::GOLD_MAGNET).upgradeBase = Plant::Type::MAGNET_SHROOM;
			_this->Get(Card::Type::SPIKEROCK).upgradeBase = Plant::Type::SPIKEWEED;
			_this->Get(Card::Type::COB_CANNON).upgradeBase = Plant::Type::KERNEL_PULT;
			_this->Get(Card::Type::PEASHOOTER).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::SUNFLOWER).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::CHERRY_BOMB).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::WALL_NUT).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::POTATO_MINE).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::SNOW_PEA).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::CHOMPER).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::REPEATER).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::PUFF_SHROOM).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::SUN_SHROOM).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::FUME_SHROOM).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::GRAVE_BUSTER).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::HYPNO_SHROOM).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::SCAREDY_SHROOM).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::ICE_SHROOM).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::DOOM_SHROOM).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::LILY_PAD).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::SQUASH).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::THREEPEATER).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::TANGLE_KELP).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::JALAPENO).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::SPIKEWEED).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::TORCHWOOD).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::TALL_NUT).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::SEA_SHROOM).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::PLANTERN).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::CACTUS).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::BLOVER).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::SPLIT_PEA).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::STARFRUIT).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::PUMPKIN).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::MAGNET_SHROOM).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::CABBAGE_PULT).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::FLOWER_POT).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::KERNEL_PULT).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::COFFEE_BEAN).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::GARLIC).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::UMBRELLA_LEAF).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::MARIGOLD).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::MELON_PULT).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::GATLING_PEA).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::TWIN_SUNFLOWER).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::GLOOM_SHROOM).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::CATTAIL).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::WINTER_MELON).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::GOLD_MAGNET).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::SPIKEROCK).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::COB_CANNON).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::IMITATER).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::EXPLODING_NUT).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::GIANT_WALL_NUT).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::FLOWER_BUD).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::REPEATER_LEFT).typeGroup = Card::TypeGroup::PLANT;
			_this->Get(Card::Type::ZOMBIE_NORMAL).typeGroup = Card::TypeGroup::ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_CONEHEAD).typeGroup = Card::TypeGroup::ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_POLE_VAULTER).typeGroup = Card::TypeGroup::ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_BUCKEDHEAD).typeGroup = Card::TypeGroup::ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_LADDER).typeGroup = Card::TypeGroup::ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_DIGGER).typeGroup = Card::TypeGroup::ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_BUNGEE).typeGroup = Card::TypeGroup::ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_FOOTBALL).typeGroup = Card::TypeGroup::ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_BALLOON).typeGroup = Card::TypeGroup::ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_SCREEN_DOOR).typeGroup = Card::TypeGroup::ZOMBIE;
			_this->Get(Card::Type::ZOMBONI).typeGroup = Card::TypeGroup::ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_POGO).typeGroup = Card::TypeGroup::ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_DANCER).typeGroup = Card::TypeGroup::ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_GARGANTUAR).typeGroup = Card::TypeGroup::ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_IMP).typeGroup = Card::TypeGroup::ZOMBIE;
			_this->Get(Card::Type::PEASHOOTER).plantType = Plant::Type::PEASHOOTER;
			_this->Get(Card::Type::SUNFLOWER).plantType = Plant::Type::SUNFLOWER;
			_this->Get(Card::Type::CHERRY_BOMB).plantType = Plant::Type::CHERRY_BOMB;
			_this->Get(Card::Type::WALL_NUT).plantType = Plant::Type::WALL_NUT;
			_this->Get(Card::Type::POTATO_MINE).plantType = Plant::Type::POTATO_MINE;
			_this->Get(Card::Type::SNOW_PEA).plantType = Plant::Type::SNOW_PEA;
			_this->Get(Card::Type::CHOMPER).plantType = Plant::Type::CHOMPER;
			_this->Get(Card::Type::REPEATER).plantType = Plant::Type::REPEATER;
			_this->Get(Card::Type::PUFF_SHROOM).plantType = Plant::Type::PUFF_SHROOM;
			_this->Get(Card::Type::SUN_SHROOM).plantType = Plant::Type::SUN_SHROOM;
			_this->Get(Card::Type::FUME_SHROOM).plantType = Plant::Type::FUME_SHROOM;
			_this->Get(Card::Type::GRAVE_BUSTER).plantType = Plant::Type::GRAVE_BUSTER;
			_this->Get(Card::Type::HYPNO_SHROOM).plantType = Plant::Type::HYPNO_SHROOM;
			_this->Get(Card::Type::SCAREDY_SHROOM).plantType = Plant::Type::SCAREDY_SHROOM;
			_this->Get(Card::Type::ICE_SHROOM).plantType = Plant::Type::ICE_SHROOM;
			_this->Get(Card::Type::DOOM_SHROOM).plantType = Plant::Type::DOOM_SHROOM;
			_this->Get(Card::Type::LILY_PAD).plantType = Plant::Type::LILY_PAD;
			_this->Get(Card::Type::SQUASH).plantType = Plant::Type::SQUASH;
			_this->Get(Card::Type::THREEPEATER).plantType = Plant::Type::THREEPEATER;
			_this->Get(Card::Type::TANGLE_KELP).plantType = Plant::Type::TANGLE_KELP;
			_this->Get(Card::Type::JALAPENO).plantType = Plant::Type::JALAPENO;
			_this->Get(Card::Type::SPIKEWEED).plantType = Plant::Type::SPIKEWEED;
			_this->Get(Card::Type::TORCHWOOD).plantType = Plant::Type::TORCHWOOD;
			_this->Get(Card::Type::TALL_NUT).plantType = Plant::Type::TALL_NUT;
			_this->Get(Card::Type::SEA_SHROOM).plantType = Plant::Type::SEA_SHROOM;
			_this->Get(Card::Type::PLANTERN).plantType = Plant::Type::PLANTERN;
			_this->Get(Card::Type::CACTUS).plantType = Plant::Type::CACTUS;
			_this->Get(Card::Type::BLOVER).plantType = Plant::Type::BLOVER;
			_this->Get(Card::Type::SPLIT_PEA).plantType = Plant::Type::SPLIT_PEA;
			_this->Get(Card::Type::STARFRUIT).plantType = Plant::Type::STARFRUIT;
			_this->Get(Card::Type::PUMPKIN).plantType = Plant::Type::PUMPKIN;
			_this->Get(Card::Type::MAGNET_SHROOM).plantType = Plant::Type::MAGNET_SHROOM;
			_this->Get(Card::Type::CABBAGE_PULT).plantType = Plant::Type::CABBAGE_PULT;
			_this->Get(Card::Type::FLOWER_POT).plantType = Plant::Type::FLOWER_POT;
			_this->Get(Card::Type::KERNEL_PULT).plantType = Plant::Type::KERNEL_PULT;
			_this->Get(Card::Type::COFFEE_BEAN).plantType = Plant::Type::COFFEE_BEAN;
			_this->Get(Card::Type::GARLIC).plantType = Plant::Type::GARLIC;
			_this->Get(Card::Type::UMBRELLA_LEAF).plantType = Plant::Type::UMBRELLA_LEAF;
			_this->Get(Card::Type::MARIGOLD).plantType = Plant::Type::MARIGOLD;
			_this->Get(Card::Type::MELON_PULT).plantType = Plant::Type::MELON_PULT;
			_this->Get(Card::Type::GATLING_PEA).plantType = Plant::Type::GATLING_PEA;
			_this->Get(Card::Type::TWIN_SUNFLOWER).plantType = Plant::Type::TWIN_SUNFLOWER;
			_this->Get(Card::Type::GLOOM_SHROOM).plantType = Plant::Type::GLOOM_SHROOM;
			_this->Get(Card::Type::CATTAIL).plantType = Plant::Type::CATTAIL;
			_this->Get(Card::Type::WINTER_MELON).plantType = Plant::Type::WINTER_MELON;
			_this->Get(Card::Type::GOLD_MAGNET).plantType = Plant::Type::GOLD_MAGNET;
			_this->Get(Card::Type::SPIKEROCK).plantType = Plant::Type::SPIKEROCK;
			_this->Get(Card::Type::COB_CANNON).plantType = Plant::Type::COB_CANNON;
			_this->Get(Card::Type::IMITATER).plantType = Plant::Type::IMITATER;
			_this->Get(Card::Type::EXPLODING_NUT).plantType = Plant::Type::EXPLODING_NUT;
			_this->Get(Card::Type::GIANT_WALL_NUT).plantType = Plant::Type::GIANT_WALL_NUT;
			_this->Get(Card::Type::FLOWER_BUD).plantType = Plant::Type::FLOWER_BUD;
			_this->Get(Card::Type::REPEATER_LEFT).plantType = Plant::Type::REPEATER_LEFT;
			_this->Get(Card::Type::ZOMBIE_NORMAL).zombieType = Zombie::Type::ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_CONEHEAD).zombieType = Zombie::Type::CONEHEAD_ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_POLE_VAULTER).zombieType = Zombie::Type::POLE_VAULTING_ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_BUCKEDHEAD).zombieType = Zombie::Type::BUCKETHEAD_ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_LADDER).zombieType = Zombie::Type::LADDER_ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_DIGGER).zombieType = Zombie::Type::DIGGER_ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_BUNGEE).zombieType = Zombie::Type::BUNGEE_ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_FOOTBALL).zombieType = Zombie::Type::FOOTBALL_ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_BALLOON).zombieType = Zombie::Type::BALLOON_ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_SCREEN_DOOR).zombieType = Zombie::Type::SCREEN_DOOR_ZOMBIE;
			_this->Get(Card::Type::ZOMBONI).zombieType = Zombie::Type::ZOMBONI;
			_this->Get(Card::Type::ZOMBIE_POGO).zombieType = Zombie::Type::POGO_ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_DANCER).zombieType = Zombie::Type::DANCING_ZOMBIE;
			_this->Get(Card::Type::ZOMBIE_GARGANTUAR).zombieType = Zombie::Type::GARGANTUAR;
			_this->Get(Card::Type::ZOMBIE_IMP).zombieType = Zombie::Type::IMP;
			_this->Get(Card::Type::PEASHOOTER).cost = 100;
			_this->Get(Card::Type::SUNFLOWER).cost = 50;
			_this->Get(Card::Type::CHERRY_BOMB).cost = 150;
			_this->Get(Card::Type::WALL_NUT).cost = 50;
			_this->Get(Card::Type::POTATO_MINE).cost = 25;
			_this->Get(Card::Type::SNOW_PEA).cost = 175;
			_this->Get(Card::Type::CHOMPER).cost = 150;
			_this->Get(Card::Type::REPEATER).cost = 200;
			_this->Get(Card::Type::PUFF_SHROOM).cost = 0;
			_this->Get(Card::Type::SUN_SHROOM).cost = 25;
			_this->Get(Card::Type::FUME_SHROOM).cost = 75;
			_this->Get(Card::Type::GRAVE_BUSTER).cost = 75;
			_this->Get(Card::Type::HYPNO_SHROOM).cost = 75;
			_this->Get(Card::Type::SCAREDY_SHROOM).cost = 25;
			_this->Get(Card::Type::ICE_SHROOM).cost = 75;
			_this->Get(Card::Type::DOOM_SHROOM).cost = 125;
			_this->Get(Card::Type::LILY_PAD).cost = 25;
			_this->Get(Card::Type::SQUASH).cost = 50;
			_this->Get(Card::Type::THREEPEATER).cost = 325;
			_this->Get(Card::Type::TANGLE_KELP).cost = 25;
			_this->Get(Card::Type::JALAPENO).cost = 125;
			_this->Get(Card::Type::SPIKEWEED).cost = 100;
			_this->Get(Card::Type::TORCHWOOD).cost = 175;
			_this->Get(Card::Type::TALL_NUT).cost = 125;
			_this->Get(Card::Type::SEA_SHROOM).cost = 0;
			_this->Get(Card::Type::PLANTERN).cost = 25;
			_this->Get(Card::Type::CACTUS).cost = 125;
			_this->Get(Card::Type::BLOVER).cost = 100;
			_this->Get(Card::Type::SPLIT_PEA).cost = 125;
			_this->Get(Card::Type::STARFRUIT).cost = 125;
			_this->Get(Card::Type::PUMPKIN).cost = 125;
			_this->Get(Card::Type::MAGNET_SHROOM).cost = 100;
			_this->Get(Card::Type::CABBAGE_PULT).cost = 100;
			_this->Get(Card::Type::FLOWER_POT).cost = 25;
			_this->Get(Card::Type::KERNEL_PULT).cost = 100;
			_this->Get(Card::Type::COFFEE_BEAN).cost = 75;
			_this->Get(Card::Type::GARLIC).cost = 50;
			_this->Get(Card::Type::UMBRELLA_LEAF).cost = 100;
			_this->Get(Card::Type::MARIGOLD).cost = 50;
			_this->Get(Card::Type::MELON_PULT).cost = 300;
			_this->Get(Card::Type::GATLING_PEA).cost = 250;
			_this->Get(Card::Type::TWIN_SUNFLOWER).cost = 150;
			_this->Get(Card::Type::GLOOM_SHROOM).cost = 150;
			_this->Get(Card::Type::CATTAIL).cost = 225;
			_this->Get(Card::Type::WINTER_MELON).cost = 200;
			_this->Get(Card::Type::GOLD_MAGNET).cost = 50;
			_this->Get(Card::Type::SPIKEROCK).cost = 125;
			_this->Get(Card::Type::COB_CANNON).cost = 500;
			_this->Get(Card::Type::IMITATER).cost = 0;
			_this->Get(Card::Type::EXPLODING_NUT).cost = 0;
			_this->Get(Card::Type::GIANT_WALL_NUT).cost = 0;
			_this->Get(Card::Type::FLOWER_BUD).cost = 0;
			_this->Get(Card::Type::REPEATER_LEFT).cost = 200;
			_this->Get(Card::Type::BEGHOULED_RESET).cost = 100;
			_this->Get(Card::Type::BEGHOULED_CRATER).cost = 200;
			_this->Get(Card::Type::SLOTMACHINE_SUN).cost = 0;
			_this->Get(Card::Type::SLOTMACHINE_DIAMOND).cost = 0;
			_this->Get(Card::Type::AQUARIUM_SNORKEL).cost = 100;
			_this->Get(Card::Type::AQUARIUM_TROPHY).cost = 1000;
			_this->Get(Card::Type::ZOMBIE_NORMAL).cost = 50;
			_this->Get(Card::Type::ZOMBIE_CONEHEAD).cost = 75;
			_this->Get(Card::Type::ZOMBIE_POLE_VAULTER).cost = 75;
			_this->Get(Card::Type::ZOMBIE_BUCKEDHEAD).cost = 125;
			_this->Get(Card::Type::ZOMBIE_LADDER).cost = 150;
			_this->Get(Card::Type::ZOMBIE_DIGGER).cost = 125;
			_this->Get(Card::Type::ZOMBIE_BUNGEE).cost = 125;
			_this->Get(Card::Type::ZOMBIE_FOOTBALL).cost = 175;
			_this->Get(Card::Type::ZOMBIE_BALLOON).cost = 150;
			_this->Get(Card::Type::ZOMBIE_SCREEN_DOOR).cost = 100;
			_this->Get(Card::Type::ZOMBONI).cost = 175;
			_this->Get(Card::Type::ZOMBIE_POGO).cost = 200;
			_this->Get(Card::Type::ZOMBIE_DANCER).cost = 350;
			_this->Get(Card::Type::ZOMBIE_GARGANTUAR).cost = 300;
			_this->Get(Card::Type::ZOMBIE_IMP).cost = 50;
			_this->Get(Card::Type::PEASHOOTER).CD = 750;
			_this->Get(Card::Type::SUNFLOWER).CD = 750;
			_this->Get(Card::Type::CHERRY_BOMB).CD = 5000;
			_this->Get(Card::Type::WALL_NUT).CD = 3000;
			_this->Get(Card::Type::POTATO_MINE).CD = 3000;
			_this->Get(Card::Type::SNOW_PEA).CD = 750;
			_this->Get(Card::Type::CHOMPER).CD = 750;
			_this->Get(Card::Type::REPEATER).CD = 750;
			_this->Get(Card::Type::PUFF_SHROOM).CD = 750;
			_this->Get(Card::Type::SUN_SHROOM).CD = 750;
			_this->Get(Card::Type::FUME_SHROOM).CD = 750;
			_this->Get(Card::Type::GRAVE_BUSTER).CD = 750;
			_this->Get(Card::Type::HYPNO_SHROOM).CD = 3000;
			_this->Get(Card::Type::SCAREDY_SHROOM).CD = 750;
			_this->Get(Card::Type::ICE_SHROOM).CD = 5000;
			_this->Get(Card::Type::DOOM_SHROOM).CD = 5000;
			_this->Get(Card::Type::LILY_PAD).CD = 750;
			_this->Get(Card::Type::SQUASH).CD = 3000;
			_this->Get(Card::Type::THREEPEATER).CD = 750;
			_this->Get(Card::Type::TANGLE_KELP).CD = 3000;
			_this->Get(Card::Type::JALAPENO).CD = 5000;
			_this->Get(Card::Type::SPIKEWEED).CD = 750;
			_this->Get(Card::Type::TORCHWOOD).CD = 750;
			_this->Get(Card::Type::TALL_NUT).CD = 3000;
			_this->Get(Card::Type::SEA_SHROOM).CD = 3000;
			_this->Get(Card::Type::PLANTERN).CD = 3000;
			_this->Get(Card::Type::CACTUS).CD = 750;
			_this->Get(Card::Type::BLOVER).CD = 750;
			_this->Get(Card::Type::SPLIT_PEA).CD = 750;
			_this->Get(Card::Type::STARFRUIT).CD = 750;
			_this->Get(Card::Type::PUMPKIN).CD = 3000;
			_this->Get(Card::Type::MAGNET_SHROOM).CD = 750;
			_this->Get(Card::Type::CABBAGE_PULT).CD = 750;
			_this->Get(Card::Type::FLOWER_POT).CD = 750;
			_this->Get(Card::Type::KERNEL_PULT).CD = 750;
			_this->Get(Card::Type::COFFEE_BEAN).CD = 750;
			_this->Get(Card::Type::GARLIC).CD = 750;
			_this->Get(Card::Type::UMBRELLA_LEAF).CD = 750;
			_this->Get(Card::Type::MARIGOLD).CD = 3000;
			_this->Get(Card::Type::MELON_PULT).CD = 750;
			_this->Get(Card::Type::GATLING_PEA).CD = 5000;
			_this->Get(Card::Type::TWIN_SUNFLOWER).CD = 5000;
			_this->Get(Card::Type::GLOOM_SHROOM).CD = 5000;
			_this->Get(Card::Type::CATTAIL).CD = 5000;
			_this->Get(Card::Type::WINTER_MELON).CD = 5000;
			_this->Get(Card::Type::GOLD_MAGNET).CD = 5000;
			_this->Get(Card::Type::SPIKEROCK).CD = 5000;
			_this->Get(Card::Type::COB_CANNON).CD = 5000;
			_this->Get(Card::Type::IMITATER).CD = 750;
			_this->Get(Card::Type::EXPLODING_NUT).CD = 3000;
			_this->Get(Card::Type::GIANT_WALL_NUT).CD = 3000;
			_this->Get(Card::Type::FLOWER_BUD).CD = 3000;
			_this->Get(Card::Type::REPEATER_LEFT).CD = 750;
			}
#endif
		);
	DefineBasicProp(Card, BaseProp_Card);
	template<>struct BaseProp<Item> {
		int sunValue = 0;
		int coinValue = 0;
	};
	__declspec(selectany) BasePropInterface<Item>BaseProp_Item(u8"Base"
#ifndef CVP
			, [](BasePropInterface<Item>* _this){
			_this->Get(Item::Type::SUN).sunValue = 25;
			_this->Get(Item::Type::SUN_SMALL).sunValue = 150;
			_this->Get(Item::Type::SUN_LARGE).sunValue = 500;
			_this->Get(Item::Type::SILVER_COIN).coinValue = 1;
			_this->Get(Item::Type::GOLD_COIN).coinValue = 5;
			_this->Get(Item::Type::DIAMOND).coinValue = 100;
			}
#endif
		);
	DefineBasicProp(Item, BaseProp_Item);
	template<>struct BaseProp<Board::Yard> {
		bool havePool = false;
		bool onRoof = false;
		bool isNight = false;
	};
	__declspec(selectany) BasePropInterface<Board::Yard>BaseProp_Yard(u8"Base"
#ifndef CVP
			, [](BasePropInterface<Board::Yard>* _this){
			_this->Get(Board::Yard::Type::POOL).havePool = true;
			_this->Get(Board::Yard::Type::FOG).havePool = true;
			_this->Get(Board::Yard::Type::ROOF).onRoof = true;
			_this->Get(Board::Yard::Type::MOON).onRoof = true;
			_this->Get(Board::Yard::Type::NIGHT).isNight = true;
			_this->Get(Board::Yard::Type::FOG).isNight = true;
			_this->Get(Board::Yard::Type::MOON).isNight = true;
			_this->Get(Board::Yard::Type::MUSHOOM_GARDEN).isNight = true;
			_this->Get(Board::Yard::Type::AQUARIUM).isNight = true;
			}
#endif
		);
	DefineBasicProp(Board::Yard, BaseProp_Yard);
	template<>struct BaseProp<GameApp::Level> {
		Cvp::Functor<void(LevelProp*)> build = Cvp::Functor<void(LevelProp*)>();
	};
	__declspec(selectany) BasePropInterface<GameApp::Level>BaseProp_Level(u8"Base"
#ifndef CVP
		, [](BasePropInterface<GameApp::Level>* _this){
			_this->Get(GameApp::Level::Type::I_ZOMBIE_1).build = [](LevelProp* _this) {
				_this->progress = 0;
				for (int row = 0; row < 5; ++row) _this->mBoard->NewBrainIz(row);
				_this->mBoard->backupMowerCount = 0;
				_this->NewPlantIZ(Plant::Type::SUNFLOWER, 3, 2);
				_this->NewPlantIZ(Plant::Type::SUNFLOWER, 3, 3);
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 7);
				_this->NewPlantsIZ(Plant::Type::SQUASH, 3);
				_this->NewPlantsIZ(Plant::Type::PEASHOOTER, 6);
				_this->NewPlantsIZ(Plant::Type::SNOW_PEA, 2);
			};
			_this->Get(GameApp::Level::Type::I_ZOMBIE_2).build = [](LevelProp* _this) {
				_this->progress = 0;
				for (int row = 0; row < 5; ++row) _this->mBoard->NewBrainIz(row);
				_this->mBoard->backupMowerCount = 0;
				_this->NewPlantIZ(Plant::Type::SPIKEWEED, 3, 0);
				_this->NewPlantIZ(Plant::Type::SUNFLOWER, 2, 0);
				_this->NewPlantIZ(Plant::Type::SUNFLOWER, 3, 3);
				_this->NewPlantsIZ(Plant::Type::SPIKEWEED, 1, 0);
				_this->NewPlantsIZ(Plant::Type::PEASHOOTER, 1, 0);
				_this->NewPlantsIZ(Plant::Type::SNOW_PEA, 2, 3);
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 1, 3);
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 4);
				_this->NewPlantsIZ(Plant::Type::SPIKEWEED, 2);
				_this->NewPlantsIZ(Plant::Type::SNOW_PEA, 2);
				_this->NewPlantsIZ(Plant::Type::PEASHOOTER, 4);
			};
			_this->Get(GameApp::Level::Type::I_ZOMBIE_3).build = [](LevelProp* _this) {
				_this->progress = 0;
				for (int row = 0; row < 5; ++row) _this->mBoard->NewBrainIz(row);
				_this->mBoard->backupMowerCount = 0;
				_this->NewPlantIZ(Plant::Type::POTATO_MINE, 3, 0);
				_this->NewPlantIZ(Plant::Type::SUNFLOWER, 2, 0);
				_this->NewPlantIZ(Plant::Type::POTATO_MINE, 2, 2);
				_this->NewPlantIZ(Plant::Type::SUNFLOWER, 2, 4);
				_this->NewPlantIZ(Plant::Type::TORCHWOOD, 3, 3);
				_this->NewPlantsIZ(Plant::Type::TORCHWOOD, 2);
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 5);
				_this->NewPlantsIZ(Plant::Type::PEASHOOTER, 7);
				_this->NewPlantsIZ(Plant::Type::SPLIT_PEA, 1);
			};
			_this->Get(GameApp::Level::Type::I_ZOMBIE_4).build = [](LevelProp* _this) {
				_this->progress = 0;
				for (int row = 0; row < 5; ++row) _this->mBoard->NewBrainIz(row);
				_this->mBoard->backupMowerCount = 0;
				_this->NewPlantIZ(Plant::Type::WALL_NUT, 3, 0);
				_this->NewPlantIZ(Plant::Type::SUNFLOWER, 2, 0);
				_this->NewPlantIZ(Plant::Type::WALL_NUT, 3, 1);
				_this->NewPlantIZ(Plant::Type::WALL_NUT, 3, 2);
				_this->NewPlantIZ(Plant::Type::SUNFLOWER, 2, 2);
				_this->NewPlantIZ(Plant::Type::WALL_NUT, 3, 3);
				_this->NewPlantIZ(Plant::Type::WALL_NUT, 3, 4);
				_this->NewPlantIZ(Plant::Type::SUNFLOWER, 2, 4);
				_this->NewPlantsIZ(Plant::Type::PEASHOOTER, 1, 0);
				_this->NewPlantsIZ(Plant::Type::SNOW_PEA, 1, 1);
				_this->NewPlantsIZ(Plant::Type::FUME_SHROOM, 2, 2);
				_this->NewPlantsIZ(Plant::Type::SNOW_PEA, 1, 3);
				_this->NewPlantsIZ(Plant::Type::PEASHOOTER, 1, 4);
				_this->NewPlantsIZ(Plant::Type::PEASHOOTER, 2);
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 4);
			};
			_this->Get(GameApp::Level::Type::I_ZOMBIE_5).build = [](LevelProp* _this) {
				_this->progress = 0;
				for (int row = 0; row < 5; ++row) _this->mBoard->NewBrainIz(row);
				_this->mBoard->backupMowerCount = 0;
				_this->NewPlantIZ(Plant::Type::SUNFLOWER, 3, 2);
				_this->NewPlantIZ(Plant::Type::SUNFLOWER, 3, 3);
				_this->NewPlantsIZ(Plant::Type::CACTUS, 1, 1);
				_this->NewPlantsIZ(Plant::Type::CACTUS, 1, 4);
				_this->NewPlantsIZ(Plant::Type::MAGNET_SHROOM, 1);
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 5);
				_this->NewPlantsIZ(Plant::Type::PEASHOOTER, 8);
				_this->NewPlantsIZ(Plant::Type::SNOW_PEA, 2);
			};
			_this->Get(GameApp::Level::Type::I_ZOMBIE_6).build = [](LevelProp* _this) {
				_this->progress = 0;
				for (int row = 0; row < 5; ++row) _this->mBoard->NewBrainIz(row);
				_this->mBoard->backupMowerCount = 0;
				_this->NewPlantIZ(Plant::Type::GARLIC, 4, 1);
				_this->NewPlantIZ(Plant::Type::GARLIC, 4, 3);
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 3, 1);
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 3, 3);
				_this->NewPlantsIZ(Plant::Type::TORCHWOOD, 2);
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 2);
				_this->NewPlantsIZ(Plant::Type::SPIKEWEED, 3);
				_this->NewPlantsIZ(Plant::Type::SNOW_PEA, 1);
				_this->NewPlantsIZ(Plant::Type::PEASHOOTER, 5);
				_this->NewPlantsIZ(Plant::Type::SQUASH, 2);
				_this->NewPlantsIZ(Plant::Type::KERNEL_PULT, 2);
			};
			_this->Get(GameApp::Level::Type::I_ZOMBIE_7).build = [](LevelProp* _this) {
				_this->progress = 0;
				for (int row = 0; row < 5; ++row) _this->mBoard->NewBrainIz(row);
				_this->mBoard->backupMowerCount = 0;
				_this->NewPlantIZ(Plant::Type::SUNFLOWER, 4, 2);
				_this->NewPlantIZ(Plant::Type::SUNFLOWER, 4, 4);
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 6);
				_this->NewPlantsIZ(Plant::Type::POTATO_MINE, 9);
				_this->NewPlantsIZ(Plant::Type::CHOMPER, 8);
			};
			_this->Get(GameApp::Level::Type::I_ZOMBIE_8).build = [](LevelProp* _this) {
				_this->progress = 0;
				for (int row = 0; row < 5; ++row) _this->mBoard->NewBrainIz(row);
				_this->mBoard->backupMowerCount = 0;
				_this->NewPlantsIZ(Plant::Type::WALL_NUT, 3);
				_this->NewPlantsIZ(Plant::Type::MAGNET_SHROOM, 2);
				_this->NewPlantsIZ(Plant::Type::PEASHOOTER, 8);
				_this->NewPlantsIZ(Plant::Type::SQUASH, 2);
				_this->NewPlantsIZ(Plant::Type::POTATO_MINE, 2);
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 8);
			};
			_this->Get(GameApp::Level::Type::I_ZOMBIE_9).build = [](LevelProp* _this) {
				_this->progress = 0;
				for (int row = 0; row < 5; ++row) _this->mBoard->NewBrainIz(row);
				_this->mBoard->backupMowerCount = 0;
				_this->NewPlantIZ(Plant::Type::TALL_NUT, 5, 1);
				_this->NewPlantIZ(Plant::Type::TORCHWOOD, 5, 3);
				_this->NewPlantsIZ(Plant::Type::POTATO_MINE, 4, 0);
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 2, 0);
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 2, 1);
				_this->NewPlantsIZ(Plant::Type::THREEPEATER, 1, 1);
				_this->NewPlantsIZ(Plant::Type::SNOW_PEA, 1, 1);
				_this->NewPlantsIZ(Plant::Type::SPLIT_PEA, 1, 1);
				_this->NewPlantsIZ(Plant::Type::CHOMPER, 3, 2);
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 2, 2);
				_this->NewPlantsIZ(Plant::Type::SQUASH, 1, 2);
				_this->NewPlantsIZ(Plant::Type::PEASHOOTER, 3, 3);
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 2, 3);
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 1, 4);
				_this->NewPlantsIZ(Plant::Type::FUME_SHROOM, 1, 4);
				_this->NewPlantsIZ(Plant::Type::SCAREDY_SHROOM, 1, 4);
				_this->NewPlantsIZ(Plant::Type::STARFRUIT, 1, 4);
				_this->NewPlantsIZ(Plant::Type::SPLIT_PEA, 1, 4);
				_this->NewPlantsIZ(Plant::Type::MAGNET_SHROOM, 1, 4);
			};
			_this->Get(GameApp::Level::Type::I_ZOMBIE_ENDLESS).build = [](LevelProp* _this) {
				_this->progress = 0;
				for (int row = 0; row < 5; ++row) _this->mBoard->NewBrainIz(row);
				_this->mBoard->backupMowerCount = 0;
				int puff_num;
				if (_this->flags >= 10) {
					puff_num = rand(5, 8);
				} else if (_this->flags >= 2) {
					puff_num = rand(limit(2, _this->flags / 3, 4), limit(2, _this->flags / 2, 6) + 1);
				} else {
					puff_num = _this->flags;
				}
				_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 8 - puff_num, -1);
				_this->NewPlantsIZ(Plant::Type::PUFF_SHROOM, puff_num, -1);
				auto rnd = RndSelecterF(0);
				rnd.put(0.400f, 0);
				rnd.put(0.267f, 1);
				rnd.put(0.133f, 2);
				if (_this->flags >= 1) {
					rnd.put(0.040f, 3);
					rnd.put(0.040f, 4);
					rnd.put(0.040f, 5);
					rnd.put(0.040f, 6);
					rnd.put(0.040f, 7);
				}
				switch (rnd.get()) {
				case 0:
					_this->NewPlantsIZ(Plant::Type::WALL_NUT, 1);
					_this->NewPlantsIZ(Plant::Type::TORCHWOOD, 1);
					_this->NewPlantsIZ(Plant::Type::POTATO_MINE, 1);
					_this->NewPlantsIZ(Plant::Type::CHOMPER, 2);
					_this->NewPlantsIZ(Plant::Type::PEASHOOTER, 1);
					_this->NewPlantsIZ(Plant::Type::SPLIT_PEA, 1);
					_this->NewPlantsIZ(Plant::Type::KERNEL_PULT, 1);
					_this->NewPlantsIZ(Plant::Type::THREEPEATER, 1);
					_this->NewPlantsIZ(Plant::Type::SNOW_PEA, 1);
					_this->NewPlantsIZ(Plant::Type::SQUASH, 1);
					_this->NewPlantsIZ(Plant::Type::FUME_SHROOM, 1);
					_this->NewPlantsIZ(Plant::Type::UMBRELLA_LEAF, 1);
					_this->NewPlantsIZ(Plant::Type::STARFRUIT, 1);
					_this->NewPlantsIZ(Plant::Type::MAGNET_SHROOM, 1);
					_this->NewPlantsIZ(Plant::Type::SPIKEWEED, 2);
					break;
				case 1:
					_this->NewPlantsIZ(Plant::Type::TORCHWOOD, 1);
					_this->NewPlantsIZ(Plant::Type::SPLIT_PEA, 3);
					_this->NewPlantsIZ(Plant::Type::REPEATER, 1);
					_this->NewPlantsIZ(Plant::Type::KERNEL_PULT, 3);
					_this->NewPlantsIZ(Plant::Type::THREEPEATER, 1);
					_this->NewPlantsIZ(Plant::Type::SNOW_PEA, 3);
					_this->NewPlantsIZ(Plant::Type::UMBRELLA_LEAF, 1);
					_this->NewPlantsIZ(Plant::Type::MAGNET_SHROOM, 1);
					_this->NewPlantsIZ(Plant::Type::SPIKEWEED, 3);
					break;
				case 2:
					_this->NewPlantsIZ(Plant::Type::POTATO_MINE, 4);
					_this->NewPlantsIZ(Plant::Type::CHOMPER, 3);
					_this->NewPlantsIZ(Plant::Type::SQUASH, 3);
					_this->NewPlantsIZ(Plant::Type::FUME_SHROOM, 4);
					_this->NewPlantsIZ(Plant::Type::SPIKEWEED, 3);
					break;
				case 3:
					_this->NewPlantsIZ(Plant::Type::SNOW_PEA, 9);
					_this->NewPlantsIZ(Plant::Type::SPLIT_PEA, 4);
					_this->NewPlantsIZ(Plant::Type::REPEATER, 4);
					break;
				case 4:
					_this->NewPlantsIZ(Plant::Type::POTATO_MINE, 9);
					_this->NewPlantsIZ(Plant::Type::CHOMPER, 8);
					break;
				case 5:
					_this->NewPlantsIZ(Plant::Type::SPIKEWEED, 9);
					_this->NewPlantsIZ(Plant::Type::STARFRUIT, 8);
					break;
				case 6:
					_this->NewPlantsIZ(Plant::Type::FUME_SHROOM, 9);
					_this->NewPlantsIZ(Plant::Type::MAGNET_SHROOM, 8);
					break;
				case 7:
					_this->NewPlantsIZ(Plant::Type::SCAREDY_SHROOM, 12);
					_this->NewPlantsIZ(Plant::Type::SUNFLOWER, 5);
					break;
				}
			};
		}
#endif
	);
	DefineBasicProp(GameApp::Level, BaseProp_Level);
}